繁体   English   中英

堆栈和堆在编程语言中

[英]Stack and heap in programming language

在C99中,以下代码行在堆栈上创建一个变量ptr,它指向堆上的内存区域。

int *ptr = (int*)malloc(sizeof(int)*10);

堆栈和堆的定义在哪里? 我在C99语言规范中找不到它们。

堆栈和堆是由操作系统或指令集架构还是其他什么定义的?

另一个相关问题是C#中堆栈和堆的概念是否与C99中的概念完全相同? 由于C#代码在.Net框架上运行,我不确定该概念是否与C99相同。

堆栈和堆是实现细节; 就像你发现的那样,C语言定义根本没有提到它们。

C语言定义讨论了对象的存储持续时间 具有auto存储持续时间的对象具有在其封闭块上延伸的寿命; 事实上,硬件堆栈使得该行为易于实现,因此几乎所有C实现都这样做。 具有已allocated存储持续时间的对象的生命周期从malloc / calloc / realloc调用延伸到对free的调用。 同样,几乎所有C实现都利用系统堆来实现该行为。

然而,实现不必须使用系统提供的堆栈或堆,以满足对象存储持续时间的要求; 这只会是一点点工作。

堆是分配给在计算机上运行的给定进程的内存量。 堆栈通常是较小的内存量,分配给当前在给定进程上运行的线程。

创建局部变量时,它将存储到堆栈中。 这种内存选择称为堆栈,因为它处理作用域时,可以像使用堆栈数据结构一样从可寻址空间推送或弹出不同的值。

然后当malloc变量时,它会被存储到堆中,因此甚至可以跨多个范围进行保存。

请注意,当您使用它们时,存储在堆上的内容必须是免费的,而操作系统会自动处理堆栈中的内容。

结帐http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM