美文网首页
C语言经过编译之后将内存分为几个区域

C语言经过编译之后将内存分为几个区域

作者: 云水禅心1973 | 来源:发表于2021-02-13 21:53 被阅读0次

C语言经过编译之后将内存分为以下几个区域:

(1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。

(2)堆(heap):用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,程序员申请的空间在使用结束后应该释放,若程序员没有释放空间,则程序结束时系统自动回收。注意:这里的“堆”并不是数据结构中的“堆”。

(3)全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。

(4)文字常量区:存放常量字符串。程序结束后由系统释放。

(5)程序代码区:存放程序的二进制代码。

显然,C语言中的全局变量和局部变量在内存中是有区别的。C语言中的全局变量包括外部变量和静态变量,均是保存在全局存储区中,占用永久性的存储单元;局部变量,即自动变量,保存在栈中,只有在所在函数被调用时才由系统动态在栈中分配临时性的存储单元。

相关文章

  • C语言经过编译之后将内存分为几个区域

    C语言经过编译之后将内存分为以下几个区域: (1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用...

  • Java堆栈的作用和用途是什么?

    一、内存区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动...

  • 内存分区-栈区 、 堆区、全局区、常量区、代码区

    一、区域划分 一个C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放,...

  • C/C++内存相关

    1. C/C++语言内存分布 一个C/C++编译的程序所占用的系统内存一般分为以下几个部分的内容: 1) 字符起始...

  • JVM的内存区域划分

    学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数...

  • JVM的内存区域划分

    学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数...

  • C语言程序内存布局

    C语言笔记之02-C语言程序内存布局 我们知道C语言的编译过程分为:预处理-编译-汇编-链接-生成可执行文件,而这...

  • ios编译过程

    前言 一般可以将编程语言分为两种,编译语言和直译式语言。 像C++,Objective C都是编译语言。编译语言在...

  • iOS编译过程的原理和应用

    前言 一般可以将编程语言分为两种,编译语言和直译式语言。 像C++,Objective C都是编译语言。编译语言在...

  • C++学习征途二

    Q1:C / C++编译的程序占用的内存。 一个由C / C++编译的程序占用的内存分为以下几个部分1、栈区(st...

网友评论

      本文标题:C语言经过编译之后将内存分为几个区域

      本文链接:https://www.haomeiwen.com/subject/jzdexltx.html