显示分配的内存量

时间:2011-01-19 13:12:24

标签: 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)
     {
     };

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

我也没有看到“无法分配”的消息。

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

  

gcc test.c

此致

1 个答案:

答案 0 :(得分:5)

我认为你可能会受到误解:2^32 2 32 (4G,假设你的字节是8位长,我会为了这个答案的目的)在C。

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

     binary        hex     decimal
    ---------      ----    -------
    0010 0000      0x20      32
xor 0000 0010      0x02       2
    =========
    0010 0010      0x22      34

或34个字节。类似地,2^31会给你29个字节,所以你认为应该是2G差异(2 32 - 2 31 )实际上只有5个字节。 / p>

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

另外还有一件事:sizeof(char) 总是 1 - 没有必要乘以它。