我有一小段C++代码,每次在unsigned char's
中读取一个块,然后出于调试目的,通过std::cout
输出
int fd;
ssize_t bytes_read {0};
unsigned char *buffer {new unsigned char[512]};
std::vector<unsigned char> *pMemory {new std::vector<unsigned char>(512)};
fd = open("/tmp/text.txt", O_RDONLY);
if (fd != -1)
{
do
{
bytes_read = read(fd, buffer, 512);
if (bytes_read > 0)
{
for (int i = 0; i < bytes_read; ++i) {
pMemory->emplace_back(buffer[i]);
}
}
} while (bytes_read > 0);
for (auto const& block : *pMemory)
{
std::cout << block;
}
std::cout << std::endl;
}
我已经用一个块初始化了向量pMemory
,以防止每次调用pMemory->emplace_back(buffer[i])
时内存抖动,但我想知道是否有更有效的方法(也许是使用迭代器从buffer
数组中移动一个范围?),将buffer
中的每个内存块移动到一个向量中?
使用insert:可以简化代码
pMemory->insert(pMemory->end(),buffer,buffer+bytes_read);
不过,它可能会也可能不会让它更快。如果性能是一个问题,您需要衡量。
请注意,您不希望向量以512字节开始(就像现在一样),您只需要保留512字节,就像这样:
std::vector<unsigned char> *pMemory = new std::vector<unsigned char>;
pMemory->reserve(512);
但您根本不需要使用new
:
unsigned char buffer[512];
std::vector<unsigned char> memory;
memory.reserve(512);
.
.
.
memory.insert(memory.end(),buffer,buffer+bytes_read);
如果你只想把文件读入一个向量,你可能想看看这个问题:把文件读入std::vector<char>?