c# - 编程语言中的栈和堆

标签 c# c heap-memory stack-memory

在 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/

相关文章:

c# - 错误 C2143 : missing ';' before '->'

c - 具有多个语句和条件的单个循环是否比几个简单的循环更好?

Elasticsearch 服务在数据插入 jvm 堆时挂起并终止

c#相对路径

c# - ASP :RequiredFieldValidator validation based on conditions

c - 为什么 gcc 使用 -O0 进行一些优化

c++ - 在堆栈上分配的变量上调用 delete

jvm - 将 Xms 和 Xmx 设置为相同的值有什么好处吗?

c# - 为什么 ^*$ 匹配 "127.0.0.1"

C 指针在传递给函数后未设置