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
问候
我想你可能误解一个下苦: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 -有没有必要用它来繁殖.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |