栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。
堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。
全局局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。
文字常量区:例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。
一个由C/C++编译程序占用内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其
操作方式类似于数据结构中栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化
全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另
一块区域。 - 程序结束后由系统释放。-->分别是data区,bbs区
4、文字常量区 —常量字符串就是放在这里。 程序结束后由系统释放-->coment区
5、程序代码区—存放函数体二进制代码。-->code区
二、例子程序
这是一个前辈写,非常详细
//main.cpp
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);
分配得来得10和20字节区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向"123456"优化成一个地方。
}
相关推荐
在编程世界中,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++中。动态分区内存管理是一种用于在程序运行时分配和释放内存的方法,它允许程序根据需要动态地调整内存使用。本主题将深入探讨动态分区内存管理的基本原理...
操作系统中的内存管理是计算机系统设计的关键部分,它涉及到如何有效地分配、使用和回收内存资源,以确保多个进程的高效运行和系统的稳定性。在这个实习作业中,我们将深入探讨内存管理的基本概念和技术。 首先,...