存储区域
2013-05-11 10:39
155 查看
代码区:用于代码所在的内存的区域,存放的时函数体的二进制代码。
静态存储区:主要存放静态数据,全局数据和常量数据,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区:试用alloc,new申请出来的空间,都是在堆区(堆区都是存储动态变量)。
2.动态存储区分为堆和栈。都是程序执行的过程中动态分配的,大小也随之动态变化。从内存管理的实现的角度看来,堆使用的链表实现的,而栈使用的是线性存储的方法。
以 string为例子:
在函数中 string str=“hello world”;
str 是一个临时变量(指针类型),所以str变量存储在栈区,而str所只想的hello world是一个字符串常量,所以存储在静态存储区,如果执行str=“hello world1”,在计算机内执行的操作是,重新在静态存储区域分配了内存区域,存储hello world1,然后再更改str所值的内存区域(既改变str的指向)。str+=str+“hello world”也是一样的。
静态存储区:主要存放静态数据,全局数据和常量数据,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区:试用alloc,new申请出来的空间,都是在堆区(堆区都是存储动态变量)。
静态存储区 栈 堆的区别(字符串常量)
1.静态存储区分为:只读数据(READONLY DATA)区、可读写数据(RW DATA)区、未初始化区(BSS)。它们都是在程序编译连接阶段确定的,在程序执行的阶段不会改变。
2.动态存储区分为堆和栈。都是程序执行的过程中动态分配的,大小也随之动态变化。从内存管理的实现的角度看来,堆使用的链表实现的,而栈使用的是线性存储的方法。以 string为例子:
在函数中 string str=“hello world”;
str 是一个临时变量(指针类型),所以str变量存储在栈区,而str所只想的hello world是一个字符串常量,所以存储在静态存储区,如果执行str=“hello world1”,在计算机内执行的操作是,重新在静态存储区域分配了内存区域,存储hello world1,然后再更改str所值的内存区域(既改变str的指向)。str+=str+“hello world”也是一样的。
相关文章推荐
- 深入Java对象及元素的存储区域
- 动态分配6个双精度型的存储区域,然后赋值并打印出来
- C++应用程序性能优化笔记(一)——数据的存储区域
- SAN (Storage Attached Network),即存储区域网络
- C语言程序的存储区域
- 再读内核存储管理(4):存储区域管理
- C#中的内存管理(二)存储区域划分
- 程序内存情况及变量存储区域(转载)
- c++变量在内存中的存储区域
- C 语言程序的存储区域
- 关于静态存储区域,堆,栈
- 对内存中存储区域的再认识
- [JAVA]深入Java对象及元素的存储区域
- C++ 内存中 常见数据存储区域
- 关于静态存储区域,堆,栈
- 五大存储区域
- 内存存储区域的讨论
- 再读uclinux-2008r1(bf561)内核存储区域管理(2):可用页表初始化
- 内存存储区域方式
- C语言程序的存储区域--内存布局