我正在浏览由另一个开发人员编写的一些源代码,当涉及到流(文件,内存等)和文件/内容上传时,我遇到了以下代码行。此人使用1024作为缓冲区是不是有特定原因?为什么将1024乘以16?
byte[] buffer = new byte[16*1024];
有人可以进一步澄清吗?另外,如果有人可以引导我阅读文章等内容,以便进一步阅读和理解,那将是很棒的事情。
答案 0 :(得分:2)
以2的次方分配内存的做法是从过去的几天开始就保持不变。字的大小为2的幂(例如,全字= 32位,双字= 8位),虚拟内存页面大小为2的幂。您希望分配的内存在方便的边界上对齐,因为这样做可以提高执行效率。例如,从前,如果一个字或双字不在适当的边界上(例如,分别被4或8整除的内存地址),则将字或双字加载到寄存器的CPU周期成本更高。而且,如果您要分配大量内存,那么您也可能会消耗整个虚拟内存页面,因为无论如何您都可能会锁定整个页面。
这天并不重要,但是旧的做法却死了。
[除非您对内存分配器的工作原理以及每个malloc()
所涉及的开销有多少单词有所了解,否则它可能始终无法工作。
答案 1 :(得分:1)