为什么即使我使用较小的数据类型,C# 也会编译成相同的大小?
Why does C# compile to the same size even if I use a smaller datatype?
我做了一点测试,因为我想看看 sbyte 和 int 之间的文件大小差异,但是当我将文件编译为 .exe 时,两者都是 4kb。为什么会这样?我很着迷那些在 java 中制作 4kb 游戏的人,但是一个 hello world 应用程序在 c# 中是 4kb。
除其他事项外 - 如果编译为 64 位,默认情况下数据类型为 64 位对齐。这是8个字节。内存就这么多了。
但在你的情况下,实际上,你没有改变任何东西。
Int32和Int16一样长(其实是System.Int16,完全是type name,其实更复杂,暂时先不管)。并且您的代码包含类型名称作为字符串。当您使变量变小时,实际上您并没有更改代码长度中的一个字节。
一般来说,程序的代码会告诉 CPU 要做什么 - 分配多少内存,在分配的内存中放入什么,如何根据内存单元中的内容做出决定,等等.
程序的长度不依赖于它在运行时分配的内存量,同理两个语句
allocate 100 1-byte units
和
allocate 500 4-byte units
使用相同数量的字符。
差异出现在 运行 时间,但是:第一个语句分配 100 个字节,而第二个语句分配 2,000 个字节。此差异并未反映 描述 分配的语句大小。
我做了一点测试,因为我想看看 sbyte 和 int 之间的文件大小差异,但是当我将文件编译为 .exe 时,两者都是 4kb。为什么会这样?我很着迷那些在 java 中制作 4kb 游戏的人,但是一个 hello world 应用程序在 c# 中是 4kb。
除其他事项外 - 如果编译为 64 位,默认情况下数据类型为 64 位对齐。这是8个字节。内存就这么多了。
但在你的情况下,实际上,你没有改变任何东西。
Int32和Int16一样长(其实是System.Int16,完全是type name,其实更复杂,暂时先不管)。并且您的代码包含类型名称作为字符串。当您使变量变小时,实际上您并没有更改代码长度中的一个字节。
一般来说,程序的代码会告诉 CPU 要做什么 - 分配多少内存,在分配的内存中放入什么,如何根据内存单元中的内容做出决定,等等.
程序的长度不依赖于它在运行时分配的内存量,同理两个语句
allocate 100 1-byte units
和
allocate 500 4-byte units
使用相同数量的字符。
差异出现在 运行 时间,但是:第一个语句分配 100 个字节,而第二个语句分配 2,000 个字节。此差异并未反映 描述 分配的语句大小。