[英]Efficient way to reuse buffer
我有一段代碼正在讀入一個恆定大小的緩沖區,可以簡化為基本上
{
constexpr std::size_t buffer_size = 262144u;
std::vector<char> buffer(buffer_size); // vector is reallocated every time
read(buffer.data(), buffer.size()); // write into the buffer
...
}
為了提高性能,我正在考慮將向量設為static
以減少每次調用此函數時的重新分配,就像這樣
{
constexpr std::size_t buffer_size = 262144u;
static std::vector<char> buffer(buffer_size); // vector is allocated only once
buffer.assign(buffer.size(), '\0'); // "reset" the vector contents
read(buffer.data(), buffer.size()); // write into the buffer
...
}
我嘗試對這兩種方法進行基准測試,它們在性能方面似乎幾乎相同(對於帶有-O3
Clang)。
這個鏈接的基准測試是對我描述的行為的一個很好的測試嗎?
從性能的角度來看,這兩種方法中的一種是否“明顯”優於另一種?
問題是你並沒有真正“重用”你的向量,因為你正在將整個事情歸零。 如果您無論如何要寫入緩沖區,那么您不必將其歸零。
如果您將整個向量寫在用戶可以看到的地方,這可能會成為一個問題,因為您可能會泄漏之前數組中的部分內容,但這種情況很少見。
這是您的基准測試,沒有明確,而只是寫入 1024 字節來模擬文件讀取。 https://quick-bench.com/q/Qkb0NTMAQ0kaydKbdpOPhQGgR6U
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.