C/C++内存知识(一)

小微 科技C/C++内存知识(一)已关闭评论123字数 594阅读模式
摘要C/C++编译的程序占用的内存分为以下几个部分栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap)— 由...

C/C++编译的程序占用的内存分为下列几个部份

  1. 栈区(stack)— 由编译器自动分配释放 ,寄存函数的参数值,局部变量的值等。其操作方式相似于数据结构中的栈。
  2. 堆区(heap)— 由程序员分配释放, 若程序员不释放,程序收场时可能由OS回收 。注意它与数据结构中的堆是两码事,分配方式倒是相似于链表。
  3. 全局区(静态区)(static)— 全局变量以及静态变量的存储是放在一块的,初始化的全局变量以及静态变量在一块区域, 未初始化的全局变量以及未初始化的静态变量在相邻的另外一块区域。程序收场后由系统释放。
  4. 文字常量区 — 常量字符串就是放在这里的,程序收场后由系统释放 。
  5. 程序代码区 — 寄存函数体的二进制代码。

二、例子程序文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html

这是一个先辈写的,无比详细文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html

//main.cpp

int a = 0; 全局初始化区

char *p1; 全局未初始化区

main

{

int b; 栈

char s[] = \"abc\"; 栈

char *p2; 栈

char *p3 = \"123456\"; 123456\\0在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = malloc;

p2 = malloc;

}

分配得来的10以及20字节的区域就在堆区。文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html

strcpy; 123456\\0放在常量区,编译器可能会将它与p3所指向的\"123456\"优化成一个处所。文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html


以上就是微观生活(93wg.com)关于“C/C++内存知识(一)”的详细内容,希望对大家有所帮助!文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html 文章源自微观生活(93wg.com)微观生活-https://93wg.com/3811.html

 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/3811.html