代码区:用于代码所在的内存的区域,存放的时函数体的二进制代码。
静态存储区:主要存放静态数据,全局数据和常量数据,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区:试用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”也是一样的。