用样例代码说明内存分配 程序员
/* * 栈区(stack): * 存放函数的参数值、局部变量的值等 * 由编译器自动分配和释放 * 其操做方式相似于数据结构中的栈 * 堆区(heap): * 通常由程序员分配和释放,若程序员不释放,程序结束时可能由操做系统回收 * 分配方式相似于链表 * 注意它与数据结构中的堆是两回事 * 全局区(静态区)(static): * 全局变量和静态变量的存储是放在一块儿的 * 初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另外一块区域 * 程序结束后由系统释放 * 文字常量区: * 常量字符串就是放在这里 * 程序结束后由系统释放 * 程序代码区: * 存放函数体的二进制代码 */
#include <stdlib.h> #include <stdio.h> #include <string.h> int a = 0; //全局初始化区 char *p1; //全局未初始化区 int main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 const char *p3 = "123456"; //123456在常量区, p3 在栈上 static int c = 0; //全局(静态)初始化区 p1 = (char*)malloc(10); //分配的10字节的区域中堆区 p2 = (char*)malloc(20); //分配的20字节的区域中堆区 strcpy(p1, "123456"); //123456在常量区,编译器可能优化与 p3 指向的同一位置 }