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