在 C99 中,以下代码行在堆栈上创建一个变量 ptr,它指向堆上的内存区域。
int *ptr = (int*)malloc(sizeof(int)*10);
栈和堆的定义在哪里?我在 C99 语言规范中找不到它们。
栈和堆是由操作系统或指令集架构还是其他什么定义的?
另外一个相关的问题是C#中栈和堆的概念是否和C99中的概念完全一样?由于C#代码运行在.Net框架上,我不确定这个概念是否与C99相同。
最佳答案
栈和堆是实现细节;正如您发现的那样,C 语言定义根本没有提及它们。
C 语言定义讨论对象的存储持续时间。具有auto
存储持续时间的对象的生命周期延伸到它们的封闭 block ;碰巧硬件堆栈使该行为易于实现,因此几乎所有 C 实现都这样做。具有 allocated
存储持续时间的对象的生命周期从 malloc
/calloc
/realloc
调用一直到调用 免费
。同样,几乎所有 C 实现都利用系统堆来实现该行为。
但是,实现必须使用系统提供的堆栈或堆来满足对象存储持续时间要求;这只会增加一点工作量。
关于c# - 编程语言中的栈和堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931129/