数组:静态分配连续内存空间

1、用数组静态获得一段连续的存储空间,大小当然有限制了。
理论上来说没有限制,但是内核一般配置允许每个进程拥有有限的内存空间,可以用系统调用函数getrlimit(int resource, struct rlimit *rlim)获得系统的资源限制。系统的资源限制分为软件限制和硬件限制,软件限制最大值不能超过硬件限制。数组静态获得的存储空间是分配在stack,只要知道stack的限制就知道答案了。可以使用如下代码获得:
struct rlimit resource_limit;
getrlimit(RLIMIT_STACK, &resource_limit);
printf("STACK: soft_limit - %ld hard_limit - %ld\n", resource_limit.rlim_cur, resource_limit.rlim_max);
我的系统上软件限制是10485760byte,已经足够了。
2.分配大数量的数组,若是系统找不到该大小的一段连续的存储空间,系统就会产生一个SIGSEGV信号,这时调用函数int sigaltstack(const stack_t *ss, stack_t *oss)来处理这个信号。sigaltstack储存信号SIGSEGV到一个alternate stack结构ss中,内核会先于进程运行前检查这个信号。

补充:至于你说的malloc限制为65536byte,可能有些片面,我的系统上申请500M都没有问题^_^当然这和系统限制有关,因为我使用了ulimit -c unlimited命令取消了限制。但是就32系统来说一般默认限制最低是16M,最大是64M,可以用ulimit -d命令改变限制范围。

 

楼上说的是普通的局部变量的数组吧,要是静态的或者全局的数组,就应该不是stack的限制了吧

 

确实是只针对普通的局部变量的数组,对于静态的或者全局的数组的空间分配是在DATA段。Unix/Linux32位系统用户使用虚拟内存最多可以3G,实际上DATA段+HEAP段+TEXT段占有的最大空间是0x08048000~0x40000000,除去HEAP段和TEXT段以外,就是DATA段的空间,当然就是理论上能获得的静态的或者全局的数组的最大空间。HEAP段占用的空间就是malloc系列函数申请的空间,至于TEXT段占有的空间相对较小,可以忽略^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值