这4K的区别是什么?

Pil*_*Dev 0 c memory heap memory-leaks

我为一个简单的测试编写了一个简单的代码.

#include <stdio.h>

typedef struct
{
    void* Data;
}List;

void x()
{
    getchar();

    int i;
    List* myList[100000];

    for(i = 0; i < 100000; i++)
    {
        myList[i] = (List*)malloc(sizeof(List)*1024*1024);
    }

    getchar();

    for(i = 0; i < 100000; i++)
    {
        free(myList[i]);
    }
}

int main()
{
    x();
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看过"taskmgr"中的程序,我看过: - 540K - 4.500K - 544K(什么是4K差异?)

unw*_*ind 7

如果您的所有分配都成功,您将使用大约100000 * 1024 * 1024 * sizeof (List)字节,这是(假设List是4个字节,32位指针)略超过390 GB.

由于您引用的数字要低得多,因此可以安全地假设并非所有分配都实际成功.实际上,很难想象它们都会在32位系统上取得成功......无论如何,你的代码永远不会检查它,所以很难说.

课程:malloc()可能会失败,如果您不检查返回值,则无法认为分配已成功.

另外,不要转换malloc()C中的返回值.