c++ - C语言中的堆栈如何分配?
迷茫
迷茫 2017-04-17 13:10:09
[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?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
PHP中文网

很显然,ij做为全局变量,在程序的静态存储区;这块区域在程序启动时即被申请,同时在程序运行全程不被释放。

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

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

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

黄舟

f:.text segment,
i:.data segment,
j:.bss segment,
x,p:stack,
x和p都是局部变量,存于栈上,但是p指向的内存空间处于heap上。

PHPz

i,j在静态区,x在栈区,p的内容在堆区

伊谢尔伦

sampe—>sample is->are

黄舟

你看下下面两个文章,讲得很清楚的

ij在堆中
xp在栈里

http://segmentfault.com/a/1190000002575242

http://m.blog.csdn.net/blog/zhoucoolqi/7540612

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号