`

内存管理

 
阅读更多



进程在内存空间中的布局就是进程映像。
从低地址到高地址依次为:

代码区(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


0
0
分享到:
评论

相关推荐

    C内存管理 pdf

    内存管理是计算机编程中一个至关重要的主题,尤其是在C语言中,因为C语言提供了对底层硬件的直接访问,包括对内存的直接控制。良好的内存管理能够确保程序的稳定性和效率,而错误的内存管理则可能导致程序崩溃、数据...

    C语言实现内存管理

    在编程世界中,C语言因其低级特性而被广泛用于系统级编程,其中包括内存管理。内存管理是程序设计中的核心部分,它涉及到如何有效地分配、使用和释放内存资源。本主题将深入探讨如何使用C语言来实现内存管理的关键...

    C#内存管理机制C#内存管理机制

    C#内存管理机制 C#内存管理机制是C#编程语言中的一种机制,旨在帮助程序员更好地管理内存资源。在C#中,程序员不需要手动管理内存,因为垃圾收集器会处理所有的内存清理工作。但是,了解C#内存管理机制仍然非常重要...

    连续动态内存管理模拟实现

    在计算机科学领域,内存管理是程序设计中的一个关键部分,特别是在高级编程语言中。动态内存管理允许程序在运行时请求和释放内存,提高了程序的灵活性。本项目关注的是连续动态内存管理,具体实现了一个基于“首次...

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    linux内存管理实验报告

    Linux内存管理是操作系统的核心组成部分,它负责有效地分配和回收内存资源,确保系统高效稳定地运行。在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 ...

    操作系统内存管理实验报告

    操作系统内存管理是计算机科学中的核心领域,特别是在Linux这样的操作系统中,理解内存的分配、管理和优化至关重要。本实验报告聚焦于在Red Hat 9环境下进行的内存管理实践,旨在深入理解内存分片、分配策略以及其对...

    操作系统内存管理实验(C语言实现)

    操作系统内存管理是计算机科学中的核心概念,它涉及如何在多任务环境下有效地分配、使用和回收内存资源。在这个“操作系统内存管理实验(C语言实现)”中,我们将深入探讨这一主题,并通过C语言编写代码来模拟和理解...

    linux内存管理源代码导读

    Linux 内存管理源代码导读 Linux 内存管理是操作系统中最重要的组件之一,它负责管理计算机的内存资源,确保系统的正确运行。在 Linux 操作系统中,内存管理是通过页框管理、Slab 算法和动态存储器管理来实现的。 ...

    glibc内存管理ptmalloc源代码分析PDF

    在分析glibc内存管理的ptmalloc源代码之前,我们需要先了解一些基础知识,包括操作系统对内存的分配和管理方法,以及glibc内存分配机制。 内存管理是操作系统的一个核心功能,它负责维护和管理计算机系统中的物理和...

    C内存管理内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题

    C++内存管理是编程领域中的一个关键话题,尤其对于C++开发者来说,它既是挑战,也是机遇。内存管理是C++复杂性和灵活性的核心,既能让经验丰富的程序员获得高性能和自由,也可能让初学者陷入无尽的调试困扰。由于C++...

    linux内存管理-物理内存管理.pdf

    整个内存管理系统可以分为2部分来看待: 第一部分是对物理内存的管理, 第二部分是对虚拟内存的管理. 物理内存管理的对象是板载的物理内存(DDRAM), 它把物理内存按页划分, 并把这些页放到一个池子里面. 物理内存管理...

    操作系统实验实验四 模拟内存管理程序

    模拟内存管理程序 本实验的目的是了解简单的固定大小内存分配方法,掌握分区存储管理技术,了解在分区管理机制下所需的数据结构。通过模拟内存管理程序,学生可以学习如何设计和实现一个基本的内存管理系统,包括...

    linux源代码分析之内存管理

    ### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...

    操作系统课程设计内存管理(源码)MFC实现

    在这个“操作系统课程设计内存管理”项目中,我们看到开发者使用了Microsoft Foundation Classes (MFC)库,这是一个C++类库,由微软为Windows应用程序开发设计。MFC简化了用户界面、数据库访问和网络编程等任务,但...

    内存管理源代码-内存管理源代码

    这份"内存管理源代码"提供了深入理解内存管理机制的宝贵资料,对于想要自己编写操作系统或者正在改进无内存管理系统的人来说,具有很高的参考价值。 在操作系统设计中,内存管理的目标主要有三个:防止内存碎片、...

    Linux操作系统内存管理.pdf

    Linux操作系统内存管理 Linux操作系统的内存管理是计算机科学中一个重要的领域。本文将详细阐述Linux操作系统的内存管理机制,包括物理内存和虚拟内存的管理机制、地址映射机制、内存碎片和内存不连续的问题解决等...

    动态分区内存管理 C++实现

    内存管理是计算机科学中的核心概念,特别是在编程语言如C++中。动态分区内存管理是一种用于在程序运行时分配和释放内存的方法,它允许程序根据需要动态地调整内存使用。本主题将深入探讨动态分区内存管理的基本原理...

Global site tag (gtag.js) - Google Analytics