C++ Arena 分配器可用内存始终是一半

标签 c++ memory-management

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/

相关文章:

c - 我认为我超出了此过程的可用内存。有人可以看一下并验证吗?

c++ - 当字节顺序很重要时 - 强制转换操作

c++ - STL map<string, string>,给key赋0值导致编译错误

c++ - 如何避免动态分配内存 C++

java - JVM如何为静态String变量分配内存?

c++ - delete 不会在函数结束时释放内存

c - malloc 对象上的 Free throws 错误

c++ - 在 Linux 上读取系统调用永远占用

c++ - wxWidgets定时器没有启动?

C++:一般来说,我应该使用字符串还是字符数组?