内存的分区

1. 内存:物理内存与虚拟内存

  • 物理内存:即计算机的实际RAM(随机存取存储器),是实实在在存在的硬件设备,用于存储运行中的程序和数据。
  • 虚拟内存:是操作系统使用的一种内存管理技术,它将物理内存和硬盘上的部分空间结合起来,形成一个更大的、统一的内存地址空间。当物理内存不足时,操作系统会将部分数据交换到硬盘上,从而腾出物理内存空间供其他程序使用。

在32位系统中,每个进程的寻址范围通常是4GB(从0x000000000xFFFFFFFF)。这是因为32位地址总线可以寻址的最大范围是2^32个地址,每个地址通常对应一个字节,因此总容量是4GB。然而,这并不意味着每个进程都能使用完整的4GB内存,因为操作系统和其他进程也需要内存。

2. 虚拟内存分区

当程序运行时,操作系统会将虚拟内存划分为不同的区域,以便更有效地管理内存资源。

2.1. 堆(Heap)
  • 用途:动态内存分配区域。程序在运行时可以使用如mallocnew等函数或操作符在堆上申请内存。
  • 特性:堆的大小在程序运行时是可变的,可以根据需要增长和收缩。由于堆内存是由程序员显式管理的,因此如果不正确释放已分配的内存,可能会导致内存泄漏。
2.2. 栈(Stack)
  • 用途:存储局部变量和函数调用的信息(如返回地址、参数等)。
  • 特性:栈是后进先出(LIFO)的数据结构。当函数被调用时,会在栈上分配空间来存储局部变量和调用信息;当函数返回时,这些空间会被自动释放。栈的大小通常是固定的,但可以通过编译器或操作系统的设置进行调整。
2.3. 静态全局区
  • 用途:存储静态变量和全局变量。
  • 细分
    • 未初始化的静态全局区:存储未初始化的静态变量和全局变量。这些变量在程序开始运行时被初始化为默认值(通常是0或空指针)。
    • 初始化的静态全局区:存储已赋初值的静态变量和全局变量。这些变量的值在程序开始运行前就已经确定。
2.4. 代码区(Text Segment 或 Code Segment)
  • 用途:存储程序的二进制代码,即机器指令。
  • 特性:代码区是只读的,以防止程序意外地修改其指令。当程序被加载到内存中时,代码区的内容会被复制到物理内存中,并由CPU执行。
2.5. 文字常量区(Literal Pool 或 Constant Pool)
  • 用途:存储字符串常量和其他编译时常量。
  • 特性:文字常量区存储的是常量的引用或实际值,这些值在程序运行时是不可变的。当程序中引用一个字符串常量时,如果该常量已经在文字常量区中存在,则不会创建新的副本,而是返回对该常量的引用。这有助于节省内存空间。

了解这些内存分区有助于程序员更好地理解和管理内存资源,从而提高程序的性能和稳定性。同时,也有助于避免常见的内存相关错误,如内存泄漏、野指针等。

相关推荐

  1. 分区

    2024-03-17 11:10:02       40 阅读
  2. c++四大分区详解

    2024-03-17 11:10:02       35 阅读
  3. 寄存器、缓、硬盘、存储器理解

    2024-03-17 11:10:02       65 阅读
  4. CUDA锁页使用

    2024-03-17 11:10:02       61 阅读
  5. C# 分配管理

    2024-03-17 11:10:02       56 阅读
  6. 计算机中缓存与

    2024-03-17 11:10:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 11:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 11:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 11:10:02       82 阅读
  4. Python语言-面向对象

    2024-03-17 11:10:02       91 阅读

热门阅读

  1. MongoDB技术学习指南

    2024-03-17 11:10:02       38 阅读
  2. C++ filesystem库介绍

    2024-03-17 11:10:02       45 阅读
  3. C语言如何进⾏字符串的⽐较?

    2024-03-17 11:10:02       39 阅读
  4. HarmonyOS 网络请求工具库封装,直接无脑用!!!

    2024-03-17 11:10:02       39 阅读
  5. sqlplus设置提示符

    2024-03-17 11:10:02       44 阅读
  6. 3月16日,每日信息差

    2024-03-17 11:10:02       40 阅读
  7. mysql的基本知识点

    2024-03-17 11:10:02       41 阅读
  8. 软考笔记--SOA主要协议与规范

    2024-03-17 11:10:02       32 阅读
  9. OutputStreamWriter类

    2024-03-17 11:10:02       46 阅读