免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2883 | 回复: 7
打印 上一主题 下一主题

关于Malloc的小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-02 14:48 |只看该作者 |倒序浏览
本帖最后由 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都不行,问题一样

论坛徽章:
0
2 [报告]
发表于 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  ??

论坛徽章:
0
3 [报告]
发表于 2010-06-02 17:47 |只看该作者
本帖最后由 zwjwelch 于 2010-06-02 17:49 编辑

我写错了,已经改过来了,确实全部清0
问题:我第二次(游标声明之后)再次打印数据,不知道谁赋上值了

论坛徽章:
0
4 [报告]
发表于 2010-06-02 18:22 |只看该作者
i am sorry ,我鄙视我自己,打印的时候越界了,此贴已结

论坛徽章:
0
5 [报告]
发表于 2010-06-02 18:23 |只看该作者
我居然怀疑linux的内存管理,太可耻了

论坛徽章:
0
6 [报告]
发表于 2010-06-02 20:00 |只看该作者
应该没有限制的吧, 只要不超过物理内存大小!

论坛徽章:
0
7 [报告]
发表于 2010-06-02 20:27 |只看该作者
应该没有限制的吧, 只要不超过物理内存大小!
liexusong 发表于 2010-06-02 20:00


不是完全没限制,需要考虑进程的地址空间。32位进程,去掉内核、text段等占用的空间,一般堆上能分配的空间不超过3G。

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
8 [报告]
发表于 2010-06-02 23:40 |只看该作者
空间分配还是有范围的

堆分配大小跟物理内存无关。。
取决于地址总线32位的话。。 最多4G的地址空间,1G内核空间不能动,其他部分可忽略
堆可分配理论大小为 不大于3G
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP