const int size = 50000;
char pool[size];
int freeMemory(void)
{
int freemem = 0;
for(int i = 0; i < size; i++)
{
if(pool[i] == NULL)
{
freemem++;
}
i++;
}
return freemem;
}
如果我调用 freeMemory(),返回的大小始终是最初声明的大小的一半。 25000 特别在这里即使我没有初始化池本身中的任何内容。为什么是这样?我需要先初始化一些东西吗?
void initialize(void)
{
//Don't quite understand if I need to initialize something here?
}
而且我也试图避免使用 new 运算符。原因是我正在尝试手动管理池内的内存。
最佳答案
因为 for 循环中有一个额外的 i++;
语句。因此,每次迭代实际上都会使迭代器递增两次,从而有效地使您只循环一半的次数。
删除 for 循环末尾的 i++;
行。
关于C++ Arena 分配器可用内存始终是一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732768/