内存分配
内存分配的三种方式:
(1) 从静态存储区域
分配。内存在程序编译的时候就已经分配好,这块儿内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2) 在栈
上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3) 在堆
上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也多。
内存分区
栈(stack):栈又称堆栈,是用户存放临时创建的局部变量(但不包括static声明的变量)。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。用malloc或new开辟内存,用free或delete释放内存。
BSS段:BSS(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量(注:虽未被人为初始化,但会被系统默认初始化为0)BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。特点是:可读写的,在程序执行之前会自动清零。
数据段:数据段(data segment)通常指用来存放程序中已初始化的全局变量和静态变量的一块儿内存区域。同时还存储字符串常量。数据段属于静态内存分配,可以分为只读数据段和读写数据段。字符串常量一般放在只读数据段中。
代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。