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?
}

而且我也试图避免使用新的运算符。原因是我正在尝试手动管理池中的内存。

最佳答案

因为您的for循环中有一个额外的i++;语句。因此,每次迭代实际上会使迭代器增加两次,从而有效地使您仅循环一半的时间。

删除for循环末尾的i++;行。

关于c++ - C++ Arena分配器的可用内存始终为一半,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15732768/

10-13 06:37