进程在内存空间中的布局就是进程映像。
从低地址到高地址依次为:
代码区(text):可执行指令、字面值常量、
具有常属性的全局和静态局部变量。只读。
数据区(data):初始化的全局和静态局部变量。
BSS区:未初始化的全局和静态局部变量。
进程一经加载此区即被清0。
数据区和BSS区有时被合称为全局区或静态区。
堆区(heap):动态内存分配。从低地址向高地址扩展。
栈区(stack):非静态局部变量,
包括函数的参数和返回值。从高地址向低地址扩展。
堆区和栈区之间存在一块间隙,
一方面为堆和栈的增长预留空间,
同时共享库、共享内存等亦位于此
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
const int const_global = 0; // 常全局变量
int init_global = 0; // 初始化全局变量
int uninit_global; // 未初始化全局变量
int main (int argc, char* argv[]) {
const static int const_static = 0; // 常静态变量
static int init_static = 0; // 初始化静态变量
static int uninit_static; // 未初始化静态变量
const int const_local = 0; // 常局部变量
int prev_local; // 前局部变量
int next_local; // 后局部变量
int* prev_heap = malloc (sizeof (int)); // 前堆变量
int* next_heap = malloc (sizeof (int)); // 后堆变量
const char* literal = "literal"; // 字面值常量
extern char** environ; // 环境变量
printf ("---- 命令行参数与环境变量 ---- <高>\n");
printf (" 环境变量:%p\n", environ);
printf (" 命令行参数:%p\n", argv);
printf ("-------------- 栈 ------------\n");
printf (" 常局部变量:%p\n", &const_local);
printf (" 前局部变量:%p\n", &prev_local);
printf (" 后局部变量:%p\n", &next_local);
printf ("-------------- 堆 ------------\n");
printf (" 后堆变量:%p\n", next_heap);
printf (" 前堆变量:%p\n", prev_heap);
printf ("------------- BSS ------------\n");
printf (" 未初始化全局变量:%p\n", &uninit_global);
printf (" 未初始化静态变量:%p\n", &uninit_static);
printf ("------------ 数据 ------------\n");
printf (" 初始化静态变量:%p\n", &init_static);
printf (" 初始化全局变量:%p\n", &init_global);
printf ("------------ 代码 ------------\n");
printf (" 常静态变量:%p\n", &const_static);
printf (" 字面值常量:%p\n", literal);
printf (" 常全局变量:%p\n", &const_global);
printf (" 函数:%p\n", main);
printf ("------------------------------ <低>\n");
printf ("查看/proc/%u/maps,按<回车>退出...", getpid ());
getchar ();
return 0;
}
size ./a.out
分享到:
相关推荐
在编程世界中,C语言因其低级特性而被广泛用于系统级编程,其中包括内存管理。内存管理是程序设计中的核心部分,它涉及到如何有效地分配、使用和释放内存资源。本主题将深入探讨如何使用C语言来实现内存管理的关键...
C#内存管理机制 C#内存管理机制是C#编程语言中的一种机制,旨在帮助程序员更好地管理内存资源。在C#中,程序员不需要手动管理内存,因为垃圾收集器会处理所有的内存清理工作。但是,了解C#内存管理机制仍然非常重要...
在计算机科学领域,内存管理是程序设计中的一个关键部分,特别是在高级编程语言中。动态内存管理允许程序在运行时请求和释放内存,提高了程序的灵活性。本项目关注的是连续动态内存管理,具体实现了一个基于“首次...
文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...
Linux内存管理是操作系统的核心组成部分,它负责有效地分配和回收内存资源,确保系统高效稳定地运行。在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 ...
操作系统内存管理是计算机科学中的核心领域,特别是在Linux这样的操作系统中,理解内存的分配、管理和优化至关重要。本实验报告聚焦于在Red Hat 9环境下进行的内存管理实践,旨在深入理解内存分片、分配策略以及其对...
操作系统内存管理是计算机科学中的核心概念,它涉及如何在多任务环境下有效地分配、使用和回收内存资源。在这个“操作系统内存管理实验(C语言实现)”中,我们将深入探讨这一主题,并通过C语言编写代码来模拟和理解...
Linux 内存管理源代码导读 Linux 内存管理是操作系统中最重要的组件之一,它负责管理计算机的内存资源,确保系统的正确运行。在 Linux 操作系统中,内存管理是通过页框管理、Slab 算法和动态存储器管理来实现的。 ...
在分析glibc内存管理的ptmalloc源代码之前,我们需要先了解一些基础知识,包括操作系统对内存的分配和管理方法,以及glibc内存分配机制。 内存管理是操作系统的一个核心功能,它负责维护和管理计算机系统中的物理和...
C++内存管理是编程领域中的一个关键话题,尤其对于C++开发者来说,它既是挑战,也是机遇。内存管理是C++复杂性和灵活性的核心,既能让经验丰富的程序员获得高性能和自由,也可能让初学者陷入无尽的调试困扰。由于C++...
整个内存管理系统可以分为2部分来看待: 第一部分是对物理内存的管理, 第二部分是对虚拟内存的管理. 物理内存管理的对象是板载的物理内存(DDRAM), 它把物理内存按页划分, 并把这些页放到一个池子里面. 物理内存管理...
模拟内存管理程序 本实验的目的是了解简单的固定大小内存分配方法,掌握分区存储管理技术,了解在分区管理机制下所需的数据结构。通过模拟内存管理程序,学生可以学习如何设计和实现一个基本的内存管理系统,包括...
### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...
在这个“操作系统课程设计内存管理”项目中,我们看到开发者使用了Microsoft Foundation Classes (MFC)库,这是一个C++类库,由微软为Windows应用程序开发设计。MFC简化了用户界面、数据库访问和网络编程等任务,但...
这份"内存管理源代码"提供了深入理解内存管理机制的宝贵资料,对于想要自己编写操作系统或者正在改进无内存管理系统的人来说,具有很高的参考价值。 在操作系统设计中,内存管理的目标主要有三个:防止内存碎片、...
Linux操作系统内存管理 Linux操作系统的内存管理是计算机科学中一个重要的领域。本文将详细阐述Linux操作系统的内存管理机制,包括物理内存和虚拟内存的管理机制、地址映射机制、内存碎片和内存不连续的问题解决等...
内存管理是计算机科学中的核心概念,特别是在编程语言如C++中。动态分区内存管理是一种用于在程序运行时分配和释放内存的方法,它允许程序根据需要动态地调整内存使用。本主题将深入探讨动态分区内存管理的基本原理...