美文网首页
内存中的分区

内存中的分区

作者: charlotte2018 | 来源:发表于2017-07-24 10:54 被阅读18次

先看下如下代码

int a = 0; //全局初始化区
char *p1; //全局未初始化区
main()
{ 
    int b; //栈
    char s[] = "abc"; //栈
    char *p2; //栈
    char *p3 = "123456"; //123456\0在常量区,p3在栈上
    static int c =0; //全局(静态)初始化区
    p1 = (char *)malloc(10); //堆
    p2 = (char *)malloc(20);  //堆
}

再看看下面的图

1609713-eaa6e0729938352f.jpg

栈区

由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。

堆区

一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收。平时iOS中new对象都是创建在堆上的。

可读可写区(.data .bss)

可读可写区(全局区)(静态区)其实都是一个意思,存放全局变量和静态变量的。

.data段

一些全局或者静态的,且经过定义初始化过的变量,就属于该段;例如下面代码中的a,指针p以及b三个变量:

int a = 2;
int *p = &a;

int main () 
{
    static int b = 1;
...
...
    return 0;
}
.bss段

一些全局或者静态的,且未经过初始化的变量,属于.bss段。例如上文中.data段段的三个变量,如果不进行初始化,就会存储在本段中.

只读区(常量区)

.text段

真正组成程序的机器指令则存放在.text段中。一般情况下,在.text段中不进行数据项的定义。.text段包含名为标号的符号,这些符号用于标识跳转和调用程序代码位置。

常量

常量如const修饰的常量,字符串常量,都放在这个区。

理解了内存的分区之后,在我们后续的内存管理上,会理解的更深刻一些。

相关文章

  • 内存中的分区

    先看下如下代码 再看看下面的图 栈区 由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。 堆区 一般由程...

  • swap分区的创建及启动关闭

    Swap分区又称为交换分区,通常是在硬盘中预留一块分区作为swap交换分区,当系统内存出现不足时,系统会将空闲内存...

  • jenkins上节点显示swap空间不足解决方案

    查看内存占用情况:free -m 1.swap分区原理: swap分区在系统的物理内存不够用的时候,把物理内存中...

  • C++运算符重载实现(加号、左移、递增、赋值、关系运算符、函数调

    先来复习一下C++的内存分区问题~ C++内存分区 C++程序的内存分区可划分为四大内存分区:堆、栈、全局/静态存...

  • 伙伴系统

    固定分区限制的内存中的作业道数,并且由于存在内部碎片而降低了内存的利用率;动态分区方式 复杂回收空调分区时需要进行...

  • 操作系统-存储管理

    为什么内存要分区?分区有哪些类型? 内存分区是为了方便地支持多程序运行。分区管理分为固定分区和可变分区,固定分区是...

  • extern const static

    内存分区简介 | 内存分区 | 保存内容 | 是否可读写 | 是否手动释放 ...

  • linux运维之磁盘分区方案

    不同场景的分区: 1)普通分区形式: /boot 引导分区 256Mswap 交换分区 内存大于8G,给8G。内存...

  • linux系列10-交换分区Swap

    虚拟内存提升内存的容量,防止OOM(Out of Memory) -查看当前的交换分区 -增加交换分区基本分区,L...

  • 【String类】对象内存分配详解

    关于内存分区参见:Java内存详解 - 内存分区 本文重点描述String对象创建时的内存分配方式。 字符串常量池...

网友评论

      本文标题:内存中的分区

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