gpt4 book ai didi

c# - 无法将指针数组放入 C# 中的不安全结构的根本原因是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:31:02 25 4
gpt4 key购买 nike

如果可以像在 C 中那样在 C# 中将指向子结构的指针数组放入不安全的结构中,那么构建复杂的数据结构而无需每个节点拥有一个对象的开销将会容易得多,而且会减少时间消耗,以及语法上更清晰,更具可读性。

为什么不安全结构中的固定数组只允许由“值类型”而不是指针组成,是否存在深层的架构原因?

我假设只有在结构中明确命名指针一定是故意削弱语言的决定,但我找不到任何文档说明为什么会这样,或者不允许在结构中使用指针数组的原因,因为我会假设垃圾收集器不关心标记为不安全的结构中发生了什么。

相比之下,Digital Mars 的 D 可以优雅地处理结构和指针,而且我无法快速开发简洁的数据结构;通过在 C# 中使引用抽象化,似乎从语言中移除了很多功能,尽管指针至少在营销意义上仍然存在。

也许我期望语言随着时间的推移在有效地表示复杂数据结构方面变得更加强大是错误的。

最佳答案

一个非常简单的原因:dotNET 有一个compacting 垃圾收集器。它四处移动东西。因此,即使您可以创建这样的数组,您也必须固定每个分配的 block ,并且您会看到系统速度变慢以致于爬行。

但是您正在尝试根据假设进行优化。 dotNET 中对象的分配和清理是高度优化的。所以先写一个工作程序,然后使用分析器找到你的瓶颈。它很可能不是您的对象的分配。

编辑,回答后半部分:

Maybe I'm wrong to expect languages to become more powerful at representing complex data structures efficiently over time.

我认为 C#(或任何托管语言)在表示方面更强大复杂的数据结构(高效)。通过从低级指针更改为垃圾收集引用。

关于c# - 无法将指针数组放入 C# 中的不安全结构的根本原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com