加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c/c++的内存分配

发布时间:2020-12-16 07:18:53 所属栏目:百科 来源:网络整理
导读:用样例代码说明内存分配? ? /* * 栈区(stack): * 存放函数的参数值、局部变量的值等 * 由编译器自动分配和释放 * 其操作方式类似于数据结构中的栈 * 堆区(heap): * 一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收 * 分配方式类似

用样例代码说明内存分配?

?

/*
 * 栈区(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 指向的同一位置 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读