malloc有关问题
malloc问题
linux gcc 内存128MB,没有交换分区
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1024*1024
int main(int argc, char **argv)
{
int count = 0;
char *buf = NULL;
while (1)
{
buf = (char *)malloc(SIZE);
if (!buf);
{
break;
}
// memset(buf, 1, SIZE);
printf("current allocated %d MB", count);
}
return 0;
}
注释掉红色部分和放开
结果分别是多少?
------解决方案--------------------
一直是 0. 因为
1. 程序里面没有改变过 count 的值.
2. if(!buf); 后面多了个分号, 所以一开始就跳出循环了.
------解决方案--------------------
没影响
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
楼主是不是少写了代码,没有影响啊
------解决方案--------------------
我知道楼主要问什么了,这个涉及到Linux的内存分配
对于Linux,如果你分配了内存并不去写他,实际上并不会真的分配内存(类似于Windows的VirtualAlloc的一些概念),所以如果不加memset,count的值可以很大
但是如果加了memset,延迟分配则会生效,这时候count不可能大于128
这个问题印象中某本书说过,《unix环境高级编程》还是《深入Linux内核架构》,忘了
------解决方案--------------------
------解决方案--------------------
这个问题我还真不知道,如果有机会调试一下就好了
------解决方案--------------------
详细请参考linux malloc源代码。
linux gcc 内存128MB,没有交换分区
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1024*1024
int main(int argc, char **argv)
{
int count = 0;
char *buf = NULL;
while (1)
{
buf = (char *)malloc(SIZE);
if (!buf);
{
break;
}
// memset(buf, 1, SIZE);
printf("current allocated %d MB", count);
}
return 0;
}
注释掉红色部分和放开
结果分别是多少?
------解决方案--------------------
一直是 0. 因为
1. 程序里面没有改变过 count 的值.
2. if(!buf); 后面多了个分号, 所以一开始就跳出循环了.
------解决方案--------------------
没影响
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
楼主是不是少写了代码,没有影响啊
------解决方案--------------------
我知道楼主要问什么了,这个涉及到Linux的内存分配
对于Linux,如果你分配了内存并不去写他,实际上并不会真的分配内存(类似于Windows的VirtualAlloc的一些概念),所以如果不加memset,count的值可以很大
但是如果加了memset,延迟分配则会生效,这时候count不可能大于128
这个问题印象中某本书说过,《unix环境高级编程》还是《深入Linux内核架构》,忘了
------解决方案--------------------
------解决方案--------------------
这个问题我还真不知道,如果有机会调试一下就好了
------解决方案--------------------
详细请参考linux malloc源代码。