一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放
,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)— 一般由程序员分配释放,
若程序员不释放,程序结束时可能由OS回收
。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,
未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。
程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
例子程序
//main.cpp
int a = 0; //全局初始化区 ,0直接写在此块区域
char *p1; //全局未初始化区 ,p1的值未知,或许为0
main()
{
int b;// 栈区
char s[] = "abc"; //栈 ("abc"在栈中---不是字符串常量,这是个数组,s也是栈中地址常量,*s即为a)
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"优化成一个地方。
}
char *a 与 char a[]的区别
char *a 定义的是字符指针, 它的值是可以改变的,
char *a="test string"; 会将字符串常量的地址直接赋值给a, 所以这个a的值可以返回给调用者
char a[] 定义的是字符数组, 它是指分配的一段内存空间的位置, 一旦分配就不要改变,
char a[]="test string"; 则是分配一块内存空间, 将字符串常量复制过来,
char *a="test string"; 只需要传入地址, 不另外分配内存空间,
char a[]="test string"; 则需要分配内存空间, 再复制字符串
分享到:
相关推荐
在探讨C语言内存分配时,首先需要了解内存的基本概念。在计算机系统中,内存可以大致分为几个不同的部分,包括栈(stack)、堆(heap)、静态存储区(static/BSS段)和代码段等。栈用于存储局部变量和函数调用的上...
### C语言内存分配详解 #### 一、C语言的4G虚拟寻址空间概念 在C语言中,每个进程都有一个4GB的虚拟地址空间。这个空间被划分为不同的区域来存储不同类型的变量和数据。这里提到的4G指的是4GB(即4 * 1024 * 1024 ...
C语言内存分配问题详解 在C语言中,内存分配是一个非常重要的概念。正确地分配和释放内存对于程序的正确性和性能至关重要。本文将详细介绍C语言中的内存分配问题,包括内存的四个区、动态分配和释放内存、避免内存...
### C语言内存分配详解 #### 一、内存分配机制概览 C语言作为一种低级语言,提供了对内存的直接访问能力。程序运行时使用的内存主要分为五个不同的区域:栈区、堆区、全局区(静态区)、文字常量区以及程序代码区...
C语言内存分配详解 C语言中的内存分配是一个非常重要的概念,它对程序的执行和性能有着至关重要的影响。在本文中,我们将详细介绍C语言中的内存分配机制,包括栈、堆、全局区、文字常量区、程序代码区等几个部分的...
理解C内存分配的五种方法及其区别对于编写高效、无内存泄漏的代码至关重要。以下是这五种方法的详细介绍: 1. 栈内存分配:栈内存是由编译器自动管理的区域,主要用于存放函数参数、局部变量等。当函数调用时,这些...
### C语言内存分配详解 #### 一、C语言中的内存分区 C语言中,内存主要分为四个区域: 1. **栈区**: - **用途**:用于存储函数的形参、局部变量以及函数调用过程中的相关信息。 - **管理机制**:由编译器自动...
### C语言内存分配详解 #### 一、野指针的概念及其管理 野指针是指一个指针指向了一个不可访问或者不明确的内存区域。在C语言中,由于开发者需要手动管理内存,不当的操作很容易产生野指针问题。例如,一个指针在...
在C语言中,内存管理是程序员需要关注的重要概念。内存主要分为四个区域:栈、堆、全局区(静态区)和文字常量区。每个区域都有其特定的用途和管理方式。 1. 栈(Stack): 栈是用于存放函数参数和局部变量的地方。...
在C语言中,内存管理是程序员必须关注的重要部分。它涉及到如何为程序的变量和数据结构分配内存,...通过学习和实践这些C语言内存分配的代码,你可以更好地理解和控制程序对内存的使用,从而编写出更健壮、高效的程序。
理解并正确实现内存分配算法对于编写高效且无内存泄漏的C程序至关重要。最优先分配算法尽管不是最快速的分配方法,但它在优化内存利用率和减少碎片方面表现出色,尤其适用于需要频繁分配和释放小内存块的场景。
不明白内存分配和指针的可以看看,其实这本是我们老师留的一个操作系统科技小论文作业,不知道写什么,干脆...(记得都是csdn里面找的) <br>tag: 操作系统 论文 内存分配 内存对齐 c语言内存分配 免费论文下载.doc
在C语言中,动态内存分配是一项重要的编程技巧,它允许程序员在程序运行时根据需要分配内存,而不是在编译时预设固定的内存空间。本文将深入解析动态内存分配的细节和一个简单的C语言程序示例。 C语言提供了四个与...
以下是对C语言内存分配的深入解析: 1. **虚拟寻址空间**:现代计算机通常使用32位或64位虚拟地址系统。对于32位系统,CPU的最大寻址能力是4GB(2^32字节),这被称为虚拟地址空间。这个空间被划分为多个区域,用于...
理解C语言内存分配对于编写高效、无错误的代码至关重要。正确管理内存可以避免内存泄漏,提高程序性能,同时也能减少潜在的运行时错误,如栈溢出和无效指针引用。在编写程序时,应尽量利用栈来存储局部变量,因为它...
它提供了直接访问内存的机制,如`malloc`、`calloc`、`realloc`和`free`等函数,这些函数在C语言中用于动态内存分配和释放。 内存分配主要包括两种类型:静态内存分配和动态内存分配。静态内存分配在编译时完成,...
在编程领域,尤其是在C/C++中,动态内存分配与回收是一项关键技能,它涉及到程序运行时内存的管理和优化。动态内存分配允许程序在运行时根据需要请求和释放内存,而不是在编译时就预设固定的内存空间。这使得程序...
在C语言中,内存分配是程序管理资源的关键部分。它涉及到如何在运行时为变量和对象分配内存,以及何时和如何释放这些内存。本篇文章将深入探讨C语言的内存分配,特别是动态内存分配,以及与之相关的堆内存分配。 ...
以下是关于C语言内存分配的一些关键知识点: 1. **内存分配的基本概念** - **内存分配**:在C语言中,内存分为四个主要区域:代码区、数据区、BSS区(未初始化数据区)和堆区。此外,还有一个栈区,用于函数调用时...