堆:是new申请的,手动申请与释放,申请大小不受限制(只在内存够),
栈:系统自动申请与回收,不需要手动释放,但申请大小有限(在Win平台申请为1M, Mac平台为8M)
用Qt测试
在Qt的项目代码中,
在Qt的对话框中加入这段代码,然后调用显示对话框
char charStack[1024 * 1024]; 在Win平台上用QtCreator编译,会崩溃,提示栈溢出
在mac 平台
char charStack[1024 * 1024 * 8]; 用Qt Creator编译,会崩溃,也是栈溢出
以前写代码都是new一个对象,这样方便重复使用。
其实还有一个重要的原因是栈申请的空间有限,如果数据量大会引起栈溢出,申请失败就崩澡了