C语言内存分配

C语言的内存分配主要有5个区域:

1、栈区:在执行函数时,函数内的局部变量(不包括static变量)、函数返回值的存储单元在栈区上创建。函数执行结束时这些存储单元自动被释放。栈区内存分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限。

2、堆区:程序在运行的时候用malloc(calloc、realloc等)申请的内存,要由程序员自己负责用free释放内存。

3、静态存储区:存放全局变量和static变量。该内存在程序编译时候就已经分配好,在程序整个运行期间都存在。

4、常量区:整型常量、浮点型常量、字符型常量及字符串常量都分配在文字常量区,程序结束后有系统释放。

5、代码区:存放整个程序代码的内存区域。数据和代码是分开存储的。

时间: 2024-10-07 14:40:25

C语言内存分配的相关文章

Go语言内存分配机制

前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处! Go语言有两种内存分配机制 , 分别是内置函数 new() 和make(). - new() - 定义: func new(Type) * Type - 返回值是一个内存块指针 - new() 是一个内置函数, 不同于其他语言中的new操作符, 它只将内存清零, 而不是初始化内存. - make(

C语言内存分配函数malloc——————【Badboy】

C语言中经常使用的内存分配函数有malloc.calloc和realloc等三个,当中.最经常使用的肯定是malloc,这里简单说一下这三者的差别和联系. 1.声明 这三个函数都在stdlib.h库文件里,声明例如以下: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 它们的功能大致类似,

关于c语言内存分配,malloc,free,和段错误,内存泄露

1.   C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数        void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL. void  free(void *ptr) 释放动态申请的内存空间,调用free()后ptr所指向的内存空间被收回,如果ptr指向未知地方或者指向的空间已被收回,则会发生不可预知的错误,如果ptr为NULL,free不会有任

C语言内存分配函数

c语言标准库提供了3个内存分配的函数,都包含在头文件<stdlib.h>中 1.malloc 函数原型: void *malloc( size_t size ); 参数:要分配内存大小的字节数 返回值:指向该内存地址的指针,若错误返回NULL 功能:分配一块指定大小的内存空间. 细节:该内存空间连续,且为堆空间,需要用free()函数手动释放,空间内为垃圾数据. 2.calloc 函数原型: void *calloc( size_t num, size_t size ); 参数:1.要分配内存

C语言内存分配机制

内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存.动态内存的生

C语言——内存分配

1.在C语言的运行过程中,需要内存来存储数据.C语言使用的内存总体可以分为两类:一类是静态区,一类是动态区.2.静态数据存储区包含:只读数据区.已初始化的读写数据区.未初始化的读写数据区     动态数据存储区包含:堆内存区域.栈内存区域     3.C语言编写的程序经过编译-连接之后,将形成一个统一的文件,它由几个部分组成:      代码段(code或text).只读数据段(RO data).宏定义.已初始化读写数据段(RW data).未初始化读写数据段(BSS).堆(heap).栈 (s

c语言内存分配-malloc

malloc 原型:(原来返回类型是char) 1 extern void *malloc(unsigned int num_bytes); 头文件: 1 #include <stdlib.h> 2 #include <malloc.h> 函数声明: void *malloc(size_t size); 返回值: 分配成功:返回被分配内存的指针 失败:返回NULL 不再使用时,可用free()函数释放内存 使用: 1 int *p,*s; 2 p=(int*)malloc(size

[草稿][C语言][内存分配]常见内存错误

1. 使用未分配成功的内存 解决案: ①在使用内存前检查指针是否为NULL ②参数是指针时,在函数入口处用assert进行判断 ③如果指针指向动态申请的内存,用if进行容错处理 2. 使用分配成功,但未初始化的内存 解决案: ①定义数组后一定要初始化 3. 内存泄漏 解决案: ①new/malloc和delete/free一定要成对出现 4. 使用已被释放的内存 解决按: ①不要返回指向栈内存的指针或引用 ②释放内存后,将指针置为NULL

C语言内存分配浅析

示例1: void myFun(int x); //声明也可写成:void myFun( int ); int main() { myFun(100);//一般的函数调用 return 0; } void myFun(int x) { printf("myFun: %d\n",x); } 我们一开始只是从功能上或者说从数学意义上理解myFun这个函数,知道myFun函数名代表的是一个功能(或是说一段代码).函数名到底又是什么东西呢? 函数指针变量 一个数据变量的内存地址可以存储在相应的