gpt4 book ai didi

C# 数组初始化

转载 作者:太空狗 更新时间:2023-10-29 22:11:16 26 4
gpt4 key购买 nike

作为具有 C、C++ 和汇编语言背景的人,关于 C# 一直困扰我的一件事是我不能做这样的事情:

struct OperatorType
{
string Operator;
TokenType Type;
}

protected static OperatorType[] Operators = {
{ "{", TokenType.OpenBrace }
};

我想声明这一点,这样它就不需要在运行时进行分配和初始化,但 C# 不允许这样做。

是的,我知道我可以使用 new OperatoryType() { Operator = "{", Type = TokenType.OpenBrace } 进行初始化。但这不涉及内存的运行时分配和初始化吗?我知道这并没有那么多开销,但我不明白为什么这里有必要。

谁能解释为什么 C# 需要这一点额外的开销,或者可能没有运行时分配的方法来做到这一点?

最佳答案

分配,无论是在 C# 还是 C++ 中,总是需要在运行时进行分配。更多的是何时分配发生的问题。

如果您在 C# 中的静态构造函数中进行分配,您将在第一次使用该类型之前的某个时间进行分配。这应该是安全的,与您的 C++ 版本相比,实际上不会有任何额外开销。

此外,要认识到一件事 - C# 中的运行时分配往往比 C++ 便宜得多。这是垃圾收集器的一个巨大优势。这很可能是过早优化的典型案例。我建议您不要担心这一点,除非您发现了一个真实的、可衡量的性能问题。

关于C# 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780910/

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