Chinaunix

标题: 关于Malloc的小问题 [打印本页]

作者: zwjwelch    时间: 2010-06-02 14:48
标题: 关于Malloc的小问题
本帖最后由 zwjwelch 于 2010-06-02 17:48 编辑

typedef struct data
{
  char   A[20 + 1];
  double B;
}YYY;
目的:想把数据放入内存
  1. 全局struct data * start;
      start = malloc( sizeof(YYY)*PROVINCECOUNT *count );
      memset(start,0,  memset(start,0,sizeof(YYY) * PROVINCECOUNT * count);
2.  打印内容 全部为空
3.  声明游标,打开游标/*此处我认为是堆分配,sybase环境*/  /*只是声明我没往刚才申请的空间写数据*/
4.  打印内容,不是全部为空
问题,谁给我赋的值?
      堆空间申请大小有限制吗?
      第二次堆分配是否会分配第一次堆分配的空间?
      在第三步和第四步之间再memset都不行,问题一样
作者: star1983653    时间: 2010-06-02 15:21
我的理解:
1.申请出来的内存,里面内容是随机的
2.用malloc分配的空间,理论上没限制
3.一般不会重复申请同一个区域。
4.这是什么?理解不了
memset(start,0,  memset(start,0,sizeof(YYY) * PROVINCECOUNT * count);
你确定你把分配的内存,都用memset清零了吗??
ProvinceId*RecordCount==PROVINCECOUNT * count  ??
作者: zwjwelch    时间: 2010-06-02 17:47
本帖最后由 zwjwelch 于 2010-06-02 17:49 编辑

我写错了,已经改过来了,确实全部清0
问题:我第二次(游标声明之后)再次打印数据,不知道谁赋上值了
作者: zwjwelch    时间: 2010-06-02 18:22
i am sorry ,我鄙视我自己,打印的时候越界了,此贴已结
作者: zwjwelch    时间: 2010-06-02 18:23
我居然怀疑linux的内存管理,太可耻了
作者: liexusong    时间: 2010-06-02 20:00
应该没有限制的吧, 只要不超过物理内存大小!
作者: drowndog    时间: 2010-06-02 20:27
应该没有限制的吧, 只要不超过物理内存大小!
liexusong 发表于 2010-06-02 20:00


不是完全没限制,需要考虑进程的地址空间。32位进程,去掉内核、text段等占用的空间,一般堆上能分配的空间不超过3G。
作者: hanzhenlll    时间: 2010-06-02 23:40
空间分配还是有范围的

堆分配大小跟物理内存无关。。
取决于地址总线32位的话。。 最多4G的地址空间,1G内核空间不能动,其他部分可忽略
堆可分配理论大小为 不大于3G




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2