欢迎关注本公众号,专注面试题拆解
分享一套视频课程:《C++实现百万并发服务器》 面试需要项目的可以找我获取,免费分享。 欢迎V:fb964919126 网络编程系列,已经更新5篇, 欢迎阅读:网络编程
char s[10*1024*1024];有问题吗?
回答:
有问题,在没有特殊设置的情况下,会发生栈溢出。(文末赠书)
先看下windows上:
int main() {
char sz[10*1024*1024];
getchar();
return 0;
}
运行:
在 Visual Studio 中,默认的栈大小通常是 1MB,代码里面用到的是10M,所以发生了栈溢出。
在 Visual Studio 中,可以通过项目属性来设置栈大小:
打开项目属性(右键点击项目 -> 属性)。
转到 Configuration Properties -> Linker -> System。
在 Stack Reserve Size 和 Stack Commit Size 中设置栈大小。
设置之后再运行上面的代码正常通过没有发生崩溃。
再看下linux:
报错:
Segmentation fault (core dumped)
在 Linux 上,如果没有特别设置,默认的栈大小通常是 8MB。
在 Linux 上,可以使用 ulimit 命令查看最大栈大小:
ulimit -s
这将显示当前用户的最大栈大小限制。
可以通过 ulimit 命令修改栈的大小
ulimit -s 8096000
修改完后运行程序不再崩溃。
00
总结
栈空间限制:在栈上分配大数组可能会导致栈溢出,特别是在默认栈大小较小的情况下。
堆内存分配:使用 new 或智能指针将数组放在堆上分配,可以避免栈溢出问题。
调整栈大小:如果确实需要在栈上分配大数组,可以通过编译器选项或项目属性调整栈大小,但需注意安全性和性能影响。
end
CppPlayer
关注,回复【电子书】珍藏CPP电子书资料赠送
精彩文章合集
专题推荐