个人知识库 个人知识库
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub

Agnes001

坚持是一件很伟大的事业
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub
  • C语言

    • 内存
      • 一个可执行程序占用的内存分为哪几个区?
    • 数组
    • 指针
    • 字符串
    • 预处理
    • 结构和联合
    • 文件操作
    • 标准函数库
    • C语言总结
  • CPlusPlus

  • Lua技术栈

  • edoyun

  • 内存管理

  • 数据结构

  • 网络编程

  • Linux

  • 池化技术

  • 操作系统

  • python

  • 编程技术
  • C语言
Agnes001
2022-07-05

内存基础

# 一个可执行程序占用的内存分为哪几个区?

  1. C语言在内存中一共分为如下几个区域,分别是: 内存从低到高的分布
  • 命令行参数和环境变量
  • 栈(从高地址往低地址增长): 局部变量/局部常量(const)[局部只读变量]/函数调用时返回地址/调用者的环境信息(例如某些机器寄存器).
    • 由编译器自动分配释放管理.
    • windows下,申请的栈空间一般为2MB。
    • Linux默认的栈空间是8MB,可以用ulimit -s 命令来修改。
  • 堆(从低地址往高低至增长): 所使用的局部变量还是在栈上,内容则在堆上.手动释放或者程序结束时由操作系统释放回收.
    • 由程序员分配[new/malloc/realloc/calloc].
    • windows下, 申请的堆空间一般小于2GB。
  • 未初始化数据段[.bbs]: 未初始化的全局变量/未初始化的(局部/全局)静态变量(static修饰的变量).
  • 初始化数据段: 初始化的全局变量/初始化的(局部/全局)静态变量(static修饰的变量)。
  • 代码段[.text]: 存储机器码序列/全局常量/代码/字符串常量.
  1. 静态内存分配和动态内存分配 一个程序被加载到内存中,这块内存首先就存在两种属性:静态分配内存和动态分配内存。 静态分配内存:是在程序编译和链接时就确定好的内存。 动态分配内存:是在程序加载、调入、执行的时候分配/回收的内存。
编辑此页
数组

数组 →

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式