1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
C语言中内存为分三类:栈区、堆区、静态数据区。
局部变量在栈上分配,函数调用前的栈指针,要和函数返回后的栈指针一样,否则就会出错。
void test(void)
{
char i,a[10]
printf("0x%x", &i)
printf("0x%x", a)
printf("0x%x", a+1)
printf("0x%x", a+2)
printf("0x%x", a+3)
}
扩展资料
c语言数组在内存分配
示例:
#include<stdio.h>
int main()
{
int a[4] = {11,12,13,14}
int b[4] = {21,22,23,24}
int *pa = &a
int i = 0
while(i<8)
{
i++
printf("now *p value = %d and",*pa)
printf("p addr value = %d \n",pa)
pa++
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)