程序运行时需要分配的内存(堆或栈)大小是否会被操作系统所限制?
初看
《编程珠玑》
,试着实现了一下第一章的外部排序问题,下面的程序首先用
generate_num(int scope, int count)
函数在0-9,999,999范围内随机生成1,000,000个正整数,存放在文件
all_nums.txt
中,格式如下所示:
2357779
3473210
4731848
然后,通过函数
disk_sort()
对该文件中的所有正整数进行排序并将其排序结果存放在另一个文件
sorted_nums.txt
中,其思想同书中类似,
不同的是这里用的是占8位的char来表示位向量
all_nums[n]
,'0'表示这个数n不在待排序集合中,'1'表示这个数n在待排序集合出现1次,以此类推
.
char all_nums[MAX_SCOPE]
这个数组需要占用
10M
内存空间。用
clang3.5
或
gcc4.8
编译成功后,分别在64位的Ubuntu14.04和Windows 8下运行它却发现
segmentation fault (core dumped)
错误。而同时以十倍缩小整数范围和整数个数至
MAX_SCOPE=1,000,000
和
count=100,000
就能够顺利运行。完整代码在这里
https://gist.github.com/xuefu/9aecc7f2b8ae3ab0ce55
。
我的问题是(基于Ubuntu 14.04):
- 操作系统对其运行的某个进程是否有内存大小限制,这个值是多少,若有,对堆内存和栈内存的限制是否一样?
- 如何来饶过这个限制,使得这个程序成功运行?应该是在编译时设置还是运行时设置?
-
C语言如何来存储单个的二进制位,像C++中的
bitset
类一样?
三过福利而不入
10 years, 4 months ago