C++中内存的分配问题
2012-05-30 22:15
323 查看
最近看到递归问题,很多递归都和堆栈有关,于是就看了下关于C++内存分配的知识
在C++中,内存分成5个区,他们分别是堆、栈、代码区、全局/静态存储区和常量存储区
[align=left] [/align]
图中将代码区和常量存储区归并到只读代码了
栈:编译器自动分配释放,一般存放函数参数值,局部变量
堆:是唯一由程序员管理的内存区域,如C中的malloc ,free, C++中的 new,delete
代码区:存放函数体(类成员函数和全局函数)的二进制代码
全局/静态存储区:如在函数中用static声明的,或者在程序开头声明的,在编译时就开辟好内存
常量存储区:如char *p="Hello World"; (虽然由系统管理,但是作用域是贯穿于整个程序的,这点比较重要)
程序分析:
#include<iostream> using namespace std; char* fun() { char str[]="hello world!"; return str; } int main(void) { char *pStr; pStr=fun(); cout<<pStr<<endl; return 0; }
程序结果:
原因:出现乱码-----str中的内容是保存在栈中的,当fun结束,系统自然就收回在栈中的内存了
#include<iostream> using namespace std; char* fun() { char *str="hello world!"; return str; } int main(void) { char *pStr; pStr=fun(); cout<<pStr<<endl; return 0; }
程序结果:
原因:怎么会出现Hello World呢
由于Hello World不能通过*str改变的,所以为文字常量,是存储在常量存储区的,而他的作用域是贯穿于整个程序的
从这里我们看出数组和指针是不相等的str[]、*str,可在网上甚至在课堂上经常出现
数组=指针
相关文章推荐
- C/C++程序中致命的内存分配问题
- C# 使用 StructLayoutAttribute 时 C# /C++ 内存空间分配与成员对齐问题
- C++中的内存分配问题
- 高质量的c/c++编程有关malloc分配内存不足的问题
- C++中有三种创建对象 内存分配问题
- 【转】C++对象内存分配问题
- C/C++程序中致命的内存分配问题
- 【转】C++成员函数的内存分配问题
- C++程序内存的分配问题
- C++中内存分配的问题
- c/c++中动态内存分配处理字符串的细节问题
- C\C++中结构体变量与结构体指针内存分配问题
- C/C++程序中致命的内存分配问题
- C++内存分配的五种方法 与 c++内存问题
- C++内存分配问题-----------堆和栈的区别
- 请高手帮忙:C/C++内存分配的问题?实例求解
- c++的内存分配问题
- Qt C++ 指向对象的指针与内存分配的问题分析
- C++内存分配问题汇总(多篇博客的总结)
- c++中变量的内存分配问题