在C99中,以下代码行在堆栈上创建一个变量ptr,它指向堆上的内存区域.
int *ptr = (int*)malloc(sizeof(int)*10);
Run Code Online (Sandbox Code Playgroud)
堆栈和堆的定义在哪里?我在C99语言规范中找不到它们.
堆栈和堆是由操作系统或指令集架构还是其他什么定义的?
另一个相关问题是C#中堆栈和堆的概念是否与C99中的概念完全相同?由于C#代码在.Net框架上运行,我不确定该概念是否与C99相同.
堆栈和堆是实现细节; 就像你发现的那样,C语言定义根本没有提到它们.
C语言定义讨论了对象的存储持续时间.具有auto存储持续时间的对象具有在其封闭块上延伸的寿命; 事实上,硬件堆栈使得该行为易于实现,因此几乎所有C实现都这样做.具有allocated存储持续时间的对象的生命周期从malloc/ calloc/ realloc调用延伸到调用free.同样,几乎所有C实现都利用系统堆来实现该行为.
然而,实现不具有使用系统提供的堆栈或堆,以满足对象存储持续时间的要求; 这只会是一点点工作.