[英]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.