c# – 为什么每个人都使用2 ^ n个数字进行分配? – > new StringBuilder(256)

15年前,在用Pascal进行编程的时候,我明白为什么要用二进制的内存分配功能.但这似乎仍然是最先进的.

C#示例:

new StringBuilder(256);
new byte[1024];
int bufferSize = 1 << 12;

我仍然看到这几千次,我自己使用,我还在质疑:

我们需要现代编程语言和现代硬件吗?
我猜这是很好的做法,但是呢是什么原因呢?

编辑
例如,一个byte []数组,如这里的答案所示,2的幂是没有意义的:数组本身将使用16个字节(?),所以使用240(= 256-16)大小适合256字节?

解决方法

Do we need this in modern programming languages and modern hardware? I guess its good practice,but what’s the reason?

这取决于.这里有两件事要考虑:

>对于小于内存页面大小的大小,二分之二和任意数字之间没有明显的差异来分配空间;
>你主要使用带有C#的托管数据结构,所以你甚至不知道在下面真正分配了多少个字节.

假设您正在使用malloc()进行低级别分配,则使用页面大小的倍数将被认为是一个好主意,即4096或8192;这是因为它允许更有效的内存管理.

我的建议是分配你需要的东西,让C#为你处理内存管理和分配.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...