簡體   English   中英

重用緩沖區的有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM