【发布时间】:2016-02-29 02:32:46
【问题描述】:
在 C99 中,以下代码行在堆栈上创建一个变量 ptr,该变量指向堆上的内存区域。
int *ptr = (int*)malloc(sizeof(int)*10);
栈和堆的定义在哪里?我在 C99 语言规范中找不到它们。
堆栈和堆是由操作系统或指令集架构还是其他东西定义的?
另外一个相关的问题是,C#中栈和堆的概念是否与C99中的概念完全一致?由于 C# 代码是在 .Net 框架上运行的,我不确定这个概念是否与 C99 相同。
【问题讨论】:
-
这将对您有所帮助。有一个很好的答案。 stackoverflow.com/questions/79923/…
-
感谢您的信息。然而,主要问题是定义在哪里?
-
在 C 中,“stack”和“heap”是俗语。
-
语言中没有堆栈和堆的定义。这些是与语言如何分配内存有关的概念。比较你从 mallloc 返回的地址和一些局部变量
int i=0; int * pi = &i;的地址。您会发现局部变量与 malloc 的内存(堆)位于不同的内存区域(堆栈)中。
标签: c# c heap-memory stack-memory