您好 我正在编写一些测试内容来查看正确分配的内存量
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
此致
答案 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 - 没有必要乘以它。