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

前端之家收集整理的这篇文章主要介绍了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#为你处理内存管理和分配.

猜你在找的C#相关文章