函数栈的内存分配大小
来源:互联网 发布:java自然语言处理 pdf 编辑:程序博客网 时间:2024/06/07 19:44
在写一个Win32程序时,出现了一个错误,是在写WM_COMMOND里面的消息处理时遇到的,在点击窗口的边框或者最大化最小化时,提示错误:用户回调期间遇到未经处理的异常,然后箭头指向return DefWindowProc (hwnd, msg, wParam, lParam);这个函数。程序在访问内存的时候出现错误,访问了同一个内存地址。于是思考是什么异常,调试。由于这个消息处理的代码有些长,于是就把这个消息处理的代码全部注释了!然后一段一段的取消注释,在一个声明数组的地方发现了问题,声明了一个100000大小的无符号整型数组,按照我以往的经验,我觉得局部开辟这么大的空间应该是可以的,然后改成10000,再次运行错误就消失了。
可以看出,也许是由于前面已经开辟了内存空间,编译器给函数分配的内存是有限的。
我们知道内存空间分配有静态分配和动态分配,静态分配是编译器做的,而动态分配需要使用new或者malloc函数等。局部的栈和堆的空间是有限的。有了教训,声明大的内存空间最好是使用全局变量,这样避免内存空间不足的异常发生。也有人提议,为了代码的可读性以及编写规范,全局变量会使得程序难以阅读和理解。真的有些矛盾啊!看具体的需求吧,如果是嵌入式,或者对应用设计的数据量比较少,就使用局部变量,否则就使用全局变量,但使用的时候要约定好变量的命名规则,范围等等。下面附上一张C++内存的布局:
0 0
- 函数栈的内存分配大小
- ROUND_UP函数详解(STL内存分配的时候 内存对齐上调大小的函数)
- 任意大小分配的内存池实现
- _msize() 返回 new 分配内存的大小
- c的内存分配函数
- ******************* 常见的内存分配函数 *******************
- 函数调用和栈的内存分配过程分析
- 关于函数中栈内存的分配问题追踪
- C++ struct内存分配大小
- C++ struct内存分配大小
- 内存栈的分配和堆的分配 。printf函数的认识
- C中 malloc()分配堆内存实际的大小
- 【程序设计】内存堆栈的分配格局解析大小端模式
- c++ 固定分配大小的简单内存池
- C中 malloc()分配堆内存实际的大小
- Android中App可分配内存的大小
- OC中alloc内存分配大小的问题
- union struct的内存分配方式及其sizeof大小
- nginx编译和调试
- SDR WiFi平台 gr-ieee802-11 软件无线电实现802.11协议
- 构想中的进阶智人
- C++学习笔记
- 原生js操作DOM元素
- 函数栈的内存分配大小
- 小程序学习用demo推荐:豆瓣使用es6;附开发总结(适用1221)
- Android开发07_Service服务
- MySQL-5.7解压版(zip版)安装配置教程
- Leetcode 之 Swap Nodes in Pairs
- 剑指offer在线编程
- lintcode,翻转链表 II
- [点双连通分量 缩点 树链剖分] Codeforces 487E #278 (Div. 1) E. Tourists
- Jquery validate验证表单时多个name相同的元素只验证第一个的问题