gpt4 book ai didi

c++ - 我应该在哪里分配这个内存?

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:43 25 4
gpt4 key购买 nike

for( int i = 0; i < lines; i++ ) {
std::unique_ptr<BYTE[]> pLine( new BYTE[lineSize] );
//Do stuff
}

现在,pLine 是在循环内部声明的,因为它只在循环体中使用。但是,在循环外仅分配一次不会减少执行的分配量(避免内存碎片)吗?

std::unique_ptr<BYTE[]> pLine( new BYTE[lineSize] );
for( int i = 0; i < lines; i++ ) {
//Do stuff
}

如果编译器知道 lineSize 在整个迭代过程中保持不变,我相信编译器将能够轻松优化第一个版本;但它确实会在整个函数调用过程中发生变化,因此我无法将其设为常量。

我还认为在检测到性能问题之前应该避免像这样的微优化,所以我想我会坚持使用第一个版本。大家怎么看?

最佳答案

首先,我认为您为此使用了错误的工具。你应该使用的是 std::vector as:

std::vector<BYTE>  data(count); //allocate and initialize

它分配内存并初始化所有元素。如果你想让它只分配,而不进行任何初始化,那么这样写:

std::vector<BYTE>  data;
data.reserve(count); //allocate only

现在,您应该在哪里声明它?这取决于它的用途。但尽量缩小变量的范围:如果仅在 for 循环中需要它,则在循环本身内声明它。

关于c++ - 我应该在哪里分配这个内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com