为什么要使用1024作为缓冲区?

时间:2019-09-02 22:31:13

标签: c# .net

我正在浏览由另一个开发人员编写的一些源代码,当涉及到流(文件,内存等)和文件/内容上传时,我遇到了以下代码行。此人使用1024作为缓冲区是不是有特定原因?为什么将1024乘以16?

byte[] buffer = new byte[16*1024];

有人可以进一步澄清吗?另外,如果有人可以引导我阅读文章等内容,以便进一步阅读和理解,那将是很棒的事情。

2 个答案:

答案 0 :(得分:2)

以2的次方分配内存的做法是从过去的几天开始就保持不变。字的大小为2的幂(例如,全字= 32位,双字= 8位),虚拟内存页面大小为2的幂。您希望分配的内存在方便的边界上对齐,因为这样做可以提高执行效率。例如,从前,如果一个字或双字不在适当的边界上(例如,分别被4或8整除的内存地址),则将字或双字加载到寄存器的CPU周期成本更高。而且,如果您要分配大量内存,那么您也可能会消耗整个虚拟内存页面,因为无论如何您都可能会锁定整个页面。

这天并不重要,但是旧的做法却死了。

[除非您对内存分配器的工作原理以及每个malloc()所涉及的开销有多少单词有所了解,否则它可能始终无法工作。

答案 1 :(得分:1)

1024是千字节中的确切字节数。所有这些行的意思是他们正在创建16 KB的缓冲区。这就是全部。如果您想知道为什么千字节中有1024个字节以及为什么在编程中使用它是个好主意,那么this将是一个不错的起点。 Here也是一个不错的地方。尽管它讨论的是磁盘空间,但这是相同的基本思想。