C语言中比较复杂的是对程序运行过程中在内存分配方面的分析问题,接下来简单介绍下C语言中一般是怎么分配的,内存中分为栈,堆,
栈:栈中存放的是局部变量,出了作用域变量就会被释放,栈是从高地址到低地址存放变量,具有先进后出的特点。
堆:恰恰与栈相反,堆是从低地址向高地址存放变量的。存放在堆里的变量是由人工申请空间的,也需要人工释放空间。
静态区:全局变量等
内存从高地址到底地址依次是栈区,堆区和静态区,例如,下面这个例子
#include <stdio.h>
#include <stdlib.h>
int a = 0;
int main()
{
int i = 0;
int j = 0;
char *p = (char *)malloc(sizeof(char));
printf("%p", &a);
printf("\n");
printf("%p", &i);
printf("\n");
printf("%p", &j);
printf("\n");
printf("%p", &p);
printf("\n");
system("pause");
return 0;
}
结果如下: