sample code:
int i = 3;
int j;
void f ()
{
int x = 4;
int *p = malloc (sizeof(*p));
}
where are i, j, f, x, and p located?
很显然,i和j做为全局变量,在程序的静态存储区;这块区域在程序启动时即被申请,同时在程序运行全程不被释放。
x和p作为局部变量,分配在调用栈上。随f()被调用时被分配,返回(退栈)时被释放。
f作为一个函数,存储在内存的代码段。代码段的东西随程序启动时读入内存,并且在程序运行全程不动。
p指向的内存被分配在堆上。“堆”其实本质是系统动态分配给内存的空间——程序把从系统中动态申请下来的一段空间视为“堆”,并提供malloc()等灵活的分配功能。操作系统其实只知道一段内存被程序申请走,而根本不知道这段内存的使用模型是“堆”。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。