我试图通过一次使用整个页面来优化程序的内存分配。
我正在获取这样的页面大小:sysconf(_SC_PAGESIZE);
然后计算适合页面的元素总数,如下所示:elements=pageSize/sizeof(Node);
我在想,当我真正去 malloc 我的内存时,我会使用malloc(elements*sizeof(Node));
似乎 sifeof(Node) 的乘法和除法会抵消,但是对于整数除法,我不相信情况是这样。
这是一次分配整个页面的最佳方法吗?
Thanks
The malloc
函数没有任何页面大小的概念。除非您分配的页面也与页面边界对齐,否则您不会从调用中获得任何好处malloc
这样。只是malloc
您需要尽可能多的元素,而不必担心微优化几乎肯定不会给您带来任何好处。
是的,Linux 内核一直在做这样的事情。原因有二:
- 您不想分配大于页面的块,因为这会显着增加分配失败的风险。
- 内核分配是按页进行的,而不是像 C 库那样一次性分配大量内存,然后将其分割成小组件。
如果您确实想分配页面大小的内存量,请使用以下结果sysconf(_SC_PAGESIZE)
作为你的尺寸参数。但几乎可以肯定,您的分配跨越了两个页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)