0

在 C# 中(可能在 VB.NET 中)有三种方法可以将常量值数组传递给函数,即:

byte[] buffer = {0};
someFunction(buffer);

byte[] buffer = new byte[] {0};
someFunction(buffer);

someFunction(new byte[] {0});

而简单的类型转换数组声明符是无效的语法:

someFunction((byte[]) {0});

问题:

三种工作方法在 CPU 使用率、内存分配和整体程序大小方面的性能差异是什么?关键字的使用是否new对 RAM 的使用或分配有任何影响,尤其是在函数调用后声明的变量立即超出范围的情况下?

4

5 回答 5

9

所有这些有效方法都将以完全相同的方式传递一个数组。您演示了三种合法声明和初始化数组的方法,并且每次将该数组传递给另一个方法。

someFunction((byte[]) {0});

根本不是有效的声明语法。

于 2012-12-17T16:46:21.923 回答
4
byte[] buffer = {0};

只是一个语法快捷方式

byte[] buffer = new byte[] {0};

someFunction(new byte[] {0});

只是一个语法快捷方式

byte[] some_tmp_variable_1 = new byte[] {0};
someFunction(some_tmp_variable_1);

因此,正如其他人所得出的结论,您实际上并没有以不同的方式将数组传递给方法 - <strong>您始终执行完全相同的操作:所有三段代码都分配本地堆栈存储以供参考,所有三个通过执行堆分配new并使用提供的值初始化数组内存。最后,全部通过值将数组引用传递给方法。

于 2012-12-17T16:50:20.003 回答
3

除了最后一个示例,您的编译器会将所有 3 个第一个示例更改为相同的代码。

于 2012-12-17T16:47:30.923 回答
2

someFunction((byte[]) {0});只是简单的错误语法,所有其他的都一样,这里唯一的区别是你的buffer变量的范围。

没有开销。

于 2012-12-17T16:47:13.797 回答
1

前三个编译后完全相同。

第四个是不正确的。

于 2012-12-17T16:47:31.813 回答