免费注册 查看新帖 |

Chinaunix

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

求助 用gcc 编译的程序中,定义的数组最大是多少? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-10 17:07 |只看该作者 |倒序浏览
各位老大,如果我想定义两个4M的数组,该加什么编译选项呢??在linux中定义的数组最大是多少呢。而不是用malloc。

如我想定义:
Msg[4*1024*1024];
TmpMsg[4*1024*1024];

论坛徽章:
0
2 [报告]
发表于 2006-08-10 17:30 |只看该作者
数组定义太大会导致栈溢出

论坛徽章:
0
3 [报告]
发表于 2006-08-10 17:41 |只看该作者
int setrlimit(int resource, const struct rlimit *rlim);

论坛徽章:
0
4 [报告]
发表于 2006-08-10 17:45 |只看该作者
编译选项不解决问题。可将数组定义为静态的试一试。

论坛徽章:
0
5 [报告]
发表于 2006-08-10 19:26 |只看该作者
你定义那么大,编译出来的程序有多大?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-08-10 21:56 |只看该作者
原帖由 diabolo 于 2006-8-10 19:26 发表
你定义那么大,编译出来的程序有多大?


这个没有必然关系吧?

论坛徽章:
0
7 [报告]
发表于 2006-08-10 22:28 |只看该作者
原帖由 aero 于 2006-8-10 21:56 发表


这个没有必然关系吧?

这个跟数组是否初始化有关系

  1. // 数组大小不被编译进结果
  2. char a[1024 * 1024];
  3. int main()
  4. {
  5.         return 0;
  6. }
复制代码


  1. // 数组大小被编译进结果
  2. char a[1024 * 1024] = "";
  3. int main()
  4. {
  5.         return 0;
  6. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-08-11 11:21 |只看该作者
原帖由 diabolo 于 2006-8-10 19:26 发表
你定义那么大,编译出来的程序有多大?

局部变量在调用函数时在栈上生成,初始化的全局变量才会编译进文件,因为他有初始化的信息,没有初始化的全局变量只是一个符号而已。

论坛徽章:
0
9 [报告]
发表于 2006-08-11 12:52 |只看该作者
定义的数组主要占的是stack的空间,而在程序连接的时候ld默认开的是2M的stack空间 而在我的程序定义是两个4M的空间。所以在运行的时候就会报SIGSEGV,即无效的内存访问. 在ld 选项中可以提高stack空间。
ld -z空间大小 -o程序名 各个.c生成的.o /usr/lib/crt1.o -L动态连接库目录 -l动态连接库

谢谢各位的提醒。
呵呵,正在试呢。等有了结果再告诉大家。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2006-08-11 12:54 |只看该作者
是不是 malloc 坏了修不好了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP