开发者社区> 问答> 正文

C语言中的堆栈如何分配?

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?

展开
收起
a123456678 2016-06-08 22:36:03 2574 0
1 条回答
写回答
取消 提交回答
  • 很显然,i和j做为全局变量,在程序的静态存储区;这块区域在程序启动时即被申请,同时在程序运行全程不被释放。

    x和p作为局部变量,分配在调用栈上。随f()被调用时被分配,返回(退栈)时被释放。

    f作为一个函数,存储在内存的代码段。代码段的东西随程序启动时读入内存,并且在程序运行全程不动。

    p指向的内存被分配在堆上。“堆”其实本质是系统动态分配给内存的空间——程序把从系统中动态申请下来的一段空间视为“堆”,并提供malloc()等灵活的分配功能。操作系统其实只知道一段内存被程序申请走,而根本不知道这段内存的使用模型是“堆”。

    2019-07-17 19:32:51
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载