1.程序运行的内存空间分布
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。这个段中的变量只占用程序运行时的内存空间,而不占用程序文件的储存空间.
data段:数据段(data segment)通常是指用来存放程序中 已初始化的全局变量 的一块内存区域。数据段属于静态内存分配。
rodata段: 该段是常量数据段,用于存放常量数据,ro就是Read Only之意。但是注意并不是所有的常量都是放在常量数据段的
text段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域。并且内在代码段中,也有可能包含一些 只读的常数变量 ,例如字符串常量等。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,完全由程序来负责内存的管理,包括什么时候申请,什么时候释放,而且对它的使用也没有什么大小的限制。
栈(stack):栈又称堆栈,存放程序的局部变量,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。
2. 堆和栈的区别:
1.分配和管理方式不同 :
堆是动态分配的,其空间的分配和释放都由程序员控制。
栈由编译器自动管理。栈有两种分配方式:静态分配和动态分配。
2.产生碎片不同
对堆来