本文主要是介绍申请1G的空间 (是否觉得题目越简单越难做呢),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
曾经碰到过的一个面试题,说,写代码申请1G的空间吧!
方法1:直接定义
char *buffer[1024*1024*1024];
解析:这就是一个1G的空间了,可是问题是,这种申请方式是在栈区开辟的,栈区往往没有那么大,比如linux中可使用 ulimit -s 查看栈区的限制大小,单位是KB,默认是8MB或者10MB的样子。所以这种方式的申请方法在不改 ulimit -s 的值的情况下,程序在初始化包含定义这个变量的函数的时候就会死掉,也就是段错误,原因是,栈区由系统管理的,系统将包含该定义的子函数放入栈区的时候,由于栈空间不足就挂掉了。修改栈大小的方法是 ulimit -s 1049600。也就是改栈区大小为1G零1M,当然应该再大一点,不能刚刚好(程序运行过程中不单单装着一个变量,还有其他东东)。
结果:
修改ulimit -s 之前
编译:通过
运行:段错误
修改ulimit -s 之后
编译:通过
运行:通过
扩展:
<
这篇关于申请1G的空间 (是否觉得题目越简单越难做呢)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!