显示分配的内存量

tgu*_*clu 1 c windows memory-management

嗨,我正在编写一些测试内容,以查看正确分配的内存量

在Windows TasK管理器中.以下是代码;

int main(int argc,char* argv[])
{
 struct stat st;
 char commandXCopy[200];
 char commandDelete[200];

 char *fNames[2^16];
 int i =0;
    char *ptr = (char *)malloc(sizeof(char) * 2^32);
     printf("\nTEST");

    if(!ptr)
            printf("\nCan not allocate");
    else
            printf("\nMemory allocate");


     while(1==1)
     {
     };
Run Code Online (Sandbox Code Playgroud)

我尝试从堆栈和堆中进行大量分配.但我在任务管理器 - >进程中看到的只有~800K.

我也没有看到"无法分配"的消息.

我有Windows 32位XP专业版,并使用gcc和应用程序是一个DOS应用程序.

gcc test.c

问候

pax*_*blo 5

我想你可能误解一个下苦:2^32不是 2 32(4G,假设你的字节是八位长,我会为这个答案的目的)的C.

^是按位XOR运算符.所以你实际分配的是:

     binary        hex     decimal
    ---------      ----    -------
    0010 0000      0x20      32
xor 0000 0010      0x02       2
    =========
    0010 0010      0x22      34
Run Code Online (Sandbox Code Playgroud)

或34个字节.同样,2^31你会给你29个字节,所以你认为应该是2G的差异(2 32 - 2 31)实际上只有5个字节.

如果你想用C做功能,你应该看一下这个pow()功能,但我怀疑你能不能获得4G的内存(可能在64位操作系统上,但即便如此,这也是非常多的).

而就在一件事:sizeof(char)就是总是 1 -有没有必要用它来繁殖.