C语言 内存分区

yizhihongxing

C语言对内存的使用划分为以下区域:

栈区(stack)、堆区(heap)、全局区(静态区)、常量区、代码区。

  • 栈区

    • 由编译器自动分配释放,按内存地址从高(地址)到低(地址)存储;
    • 栈区内容的作用域为其所定义的函数内,生命周期为函数执行期间,函数结束自动释放;
    • 存放局部变量const局部变量、函数调用时的入口参数返回值
    • 栈区内容先进后出;
  • 堆区

    • 堆区内存由程序员管理,堆区空间申请后使用(申请时注意保存地址,防止内存泄漏),用完后一定及时手动释放,防止内存泄漏;
    • 堆区存储由低地址向高地址存储,内容可读可写;
    • 申请方法:

    void *malloc(size_t size);
    void free(void *ptr);
    void *calloc(size_t nmemb, size_t size);
    void *realloc(void *ptr, size_t size);

  • 全局(静态)区

    • 由系统管理,全局(静态)区内容的生命周期为整个程序运行期间;
    • 存放全局变量和static修饰的静态变量(包括静态全局变量静态局部变量);初始化的放在一块,未初始化的放在一块;
    • 全局变量和静态全局变量的作用域均为全局,但其他源文件可以通过extern关键字声明之后引用全局变量,而不能引用静态全局变量
    • 静态局部变量只在其定义函数内可见;
  • 常量区

    • 由系统管理,存放常量,const全局变量,只读;
  • 代码区

    • 由系统管理,存放程序的二进制代码,只读;

分区图示

参考文章:
C语言:内存分配---栈区、堆区、全局区、常量区和代码区
c语言中的五种内存分区-笔记
c语言内存分区-(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)

原文链接:https://www.cnblogs.com/see-dream/p/c.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 内存分区 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 少女前线新手最全面入门指南 阵容搭配及枪娘选择攻略

    少女前线新手最全面入门指南 前言 《少女前线》是一款枪械题材的卡牌养成游戏,深受广大玩家喜爱。然而,对于新手来说,玩法和系统繁琐复杂,很容易迷失方向。因此,本篇文章将为各位新手提供一份全方位的入门指南,帮助大家快速了解游戏,并通过合理的阵容搭配和枪娘选择攻略,提高游戏体验。 入门指南 1. 完成游戏引导流程 在刚进入游戏时,请务必按照游戏引导流程逐步完成任务…

    C 2023年5月22日
    00
  • C 共用体

    C语言共用体(Union)完整使用攻略 共用体(Union)是C语言中一种特殊的数据类型,与结构体(Struct)类似,也是一种复合类型。共用体允许不同的数据类型在相同的内存空间里互相转换使用,这意味着在同一时间只能保存相同的数据类型,但可以在不同的时间存储不同的数据类型。 创建共用体 共用体和结构体的方式非常相似,可以使用关键字union来定义共用体,例如…

    C 2023年5月10日
    00
  • ubuntu系统下C++调用matlab程序的方法详解

    关于在Ubuntu系统下C++调用matlab程序的方法详解,我整理了以下的攻略: 确认安装及配置 在开始调用matlab程序前,必须要确认系统已安装matlab软件及其C++编译器。同时,也需要设置matlab的环境变量来确保matlab程序能够被其他程序调用。 确认安装matlab 首先,可以在终端中输入以下命令,确认matlab是否已正确安装: mat…

    C 2023年5月23日
    00
  • Visual Studio Code 2020安装教程及CPP环境配置(教程图解)

    Visual Studio Code(简称VS Code)是一款由微软推出的免费、开源的代码编辑器。VS Code支持多种编程语言,如C/C++、Python、Java、JavaScript等等,并且拓展插件丰富,使得开发者可以高效地完成开发任务。以下是Visual Studio Code 2020安装教程及CPP环境配置的完整攻略。 步骤1:下载安装Vis…

    C 2023年5月24日
    00
  • python计算方程式根的方法

    下面我来详细讲解 Python 计算方程式根的方法。 什么是方程式根? 方程式是用数学符号表示的等式,例如:$x+3=5$,这个方程式的解是 $x=2$ ,而这个解就是方程式的根。在计算机编程中,我们通常需要对方程式进行求解,得到它的根。 解方程的方法 1. 数值逼近法 数值逼近法是一种广泛应用于计算机编程的求解方程式的方法。这种方法通过构造一个逐渐逼近方程…

    C 2023年5月22日
    00
  • C语言实现简单的定时器

    下面是详细讲解“C语言实现简单的定时器”的完整攻略。 一、定时器基本概念 在计算机中,定时器是一种可以精确测量时间的硬件或软件设备。它可以用于各种计算机程序中,比如处理定时任务、测量延迟等等。 一般来说,定时器都会有一个计数器,当计数器达到一定值后,就会触发一个中断以执行相关处理。在实际编程中,我们需要用到定时器,往往需要先初始化定时器并设置计数器的初值和中…

    C 2023年5月22日
    00
  • c++中c_str()的用法示例

    下面是对于“c++中c_str()的用法示例”的完整攻略: 什么是c_str() c_str()是一个C++字符串类string的成员函数,用于将string类型字符串转换成C风格的字符串,即以’\0’结尾的字符数组。 c_str()函数的语法 c_str()函数的语法如下: const char* c_str() const noexcept; 该函数返回…

    C 2023年5月23日
    00
  • C++11/14 线程调用类对象和线程传参的方法

    C++11/14 引入了 std::thread 类和一些线程库支持,可以方便地支持在 C++11/14 中创建线程。当需要在线程内调用类的对象或传递参数时,有几种方法可以实现。 调用类对象 使用成员函数 C++11/14 允许我们使用 lambda 表达式在一个新线程中调用一个类的某个成员函数。我们需要捕获类对象的引用,例如: class MyClass …

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部