如果使用64位UNIX操作系统,将数组大小定义为8的倍数是否有优势?我打算使用这个数组来从共享内存中加载数据。因此操作系统和页面大小上可能存在依赖关系。数组大小优化
数组大小优化
回答
没关系。你的编译器知道它是否需要填充,所以让它决定。不要因为猜测而弄脏代码。
让你的程序工作第一个,然后关心性能与分析器。
我的程序工作正常,我使用这个数组从共享内存中加载数据。所以问题是关于性能和内存使用情况? – 2010-10-22 13:35:18
@Sachin:你确定这是你程序中的瓶颈吗?你在数组中做什么是你想要提出的问题。你能添加更多的上下文吗? – GManNickG 2010-10-22 13:36:40
我已更新问题,请现在检查 – 2010-10-22 13:40:47
假设你在堆上动态分配数组,假设malloc的内部分配算法将实际上对内核的内存请求抽象化,这是公平的。也就是说,malloc()调用和libc的brk()(或mmap())系统调用之间可能存在或可能不存在直接关系。
malloc手册页有更多关于此的内容。
因此,就内存使用情况而言,我倾向于建议由于malloc可能会在你下面做一些不同的事情(并且是合理的),所以你是否分配8个字节的倍数并不重要。
就程序性能而言,数据结构在内存中的分配可能会对缓存性能产生巨大影响。但是,最终,您需要对应用程序进行配置,以查看是否可以提高其缓存性能。我不相信有一条强硬的规则可以让你在编写代码的时候优化它。
如果你有兴趣了解更多关于记忆和Linux,乌利齐·德雷珀关于这个问题在几年前写了一个梦幻般的系列LWN:
如果你是有关内存访问对齐或所以 - 这是内部环境/ libc事宜如何调整动态分配。如果其大小对齐,则不保证以特定方式对齐某个数组。许多分配器返回对齐到某个值的内存块(大约是机器字的2倍或4倍大小),所以它不是调整对齐的地方。
我只记得几件事情,可能有重要意义:
您可能希望使用矢量操作和/或展开的循环处理数组,所以它可能需要有一定的留白,使程序不超出分配区域。 (但是,如果你的向量引擎需要超出标准C实现提供的对齐方式,你必须以另一种方式分配内存,而不仅仅是简单的malloc())。
大多数内存分配器在分配区域旁边存储服务信息(例如分配的块大小),并且从空闲中切割的总内存大小稍大。最好是分配比某个值小一些的区域,以便在某个标准分配块(比如内存页面)中有密集的区域。例如,如果CPU有4k页,那么页面可能只包含3个1024字节块,但是4个1008字节(= 1024-8)块。另外,许多内存分配器都有一个块大小阈值,低于这样的内存是从堆中分配的,但是在它之上,内存是通过整个硬件页直接从OS VM调度器获得的,因此在页边界上对齐。在这种情况下,可能需要将分配大小舍入到页面大小以获得整个页面。
有可能是soume其他问题,但我不记得他们。
很好的答案。两个问题。 L2高速缓存中的块与RAM块的大小相同吗? L2缓存是否缓存单个块还是具有更精细的粒度? “ ”作为一个例子,如果CPU有4k页面,那么页面可能只包含3个1024字节块,但是4个1008字节(= 1024-8)块。“这如何确定? – HaltingState 2011-12-25 14:26:48
具体值取决于MPU开发人员,可能因模型而异,因此a不能全部回答您。您必须查看MPU数据表以获得答案。无论如何,作为一种良好的做法,您不应该依赖特定的值或分配器行为(至少在您的代码检查为真)之前。缓存页面可能因型号不同而不同,作为VMM页面的'硬件页面'甚至可以通过OS切换,因此根据上下文有很多答案。 – Vovanium 2011-12-26 19:35:29
- 1. 优化批量大小
- 2. 优化线程池大小
- 3. 优化ABCpdf文件大小
- 4. 大小优化选项
- 5. java内存大小优化
- 6. 优化SDF文件大小
- 7. 如何优化Firebase数据库大小
- 8. int事物的大小?数独优化
- 9. Matlab:优化缩小矢量大小
- 10. 优化CSS文件大小过大
- 11. 优化Python:大数组,内存问题
- 12. 按小时查询优化小组
- 13. javascript数组优化
- 14. 优化excel数组
- 15. PHP数组 - 优化
- 16. Visual Studio 2010 - 优化大小或优化速度
- 17. g ++优化小写字母大写 - bug?
- 18. 优化控件大小调整
- 19. php - 优化图像文件大小
- 20. android优化的按钮大小
- 21. Mysql的最小/最大优化
- 22. 优化Azure虚拟机大小
- 23. AS3:优化对象内存大小
- 24. 针对代码大小优化的Newlib
- 25. 优化QT的二进制大小?
- 26. 优化AS3 SWF文件的大小?
- 27. 如何优化PDF文件大小?
- 28. 优化div +屏幕大小JS块
- 29. 优化表以减少索引大小
- 30. bulkinsert插入大小的优化
你的意思是数组大小? – 2010-10-22 13:30:52
是的,我的意思是数组大小 – 2010-10-22 13:31:42
为什么8?大声笑这将是更好的定义数组大小的倍数'PAGE_SIZE/sizeof(ARRAY_ELEMENT)'...'4096/8' =='512'(开玩笑) – pmg 2010-10-22 13:32:56