首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

malloc有关问题

2012-10-06 
malloc问题linuxgcc内存128MB,没有交换分区#include stdio.h#include stdlib.h#define SIZE 1024*1024

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); 后面多了个分号, 所以一开始就跳出循环了.
[解决办法]
没影响
[解决办法]

探讨

#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……

[解决办法]
探讨

#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……

[解决办法]
楼主是不是少写了代码,没有影响啊
[解决办法]
我知道楼主要问什么了,这个涉及到Linux的内存分配

对于Linux,如果你分配了内存并不去写他,实际上并不会真的分配内存(类似于Windows的VirtualAlloc的一些概念),所以如果不加memset,count的值可以很大

但是如果加了memset,延迟分配则会生效,这时候count不可能大于128

这个问题印象中某本书说过,《unix环境高级编程》还是《深入Linux内核架构》,忘了
[解决办法]
探讨
我知道楼主要问什么了,这个涉及到Linux的内存分配

对于Linux,如果你分配了内存并不去写他,实际上并不会真的分配内存(类似于Windows的VirtualAlloc的一些概念),所以如果不加memset,count的值可以很大

但是如果加了memset,延迟分配则会生效,这时候count不可能大于128

这个问题印象中某本书说过,《unix环境高级编程》还是《深入Linux……

[解决办法]
这个问题我还真不知道,如果有机会调试一下就好了
[解决办法]
详细请参考linux malloc源代码。

热点排行