【发布时间】:2014-09-11 03:07:19
【问题描述】:
我分配了 32 字节的连续内存(使用 malloc)来保存八个连续的 32 位值。在这块内存上执行了某些任务后,值的布局如下:
+---+---+---+---+---+---+---+---+
| d | | | | | a | b | c |
+---+---+---+---+---+---+---+---+
注意到有一个洞吗?这些值不再需要并且可以忽略。该孔将始终是主分配大小的一半,并且始终是连续的。
在重新分配这块内存的同时将值重新排序为这样的最有效和最快的方法是什么?
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
任何建议都会很有帮助。
【问题讨论】:
-
孔是否每次都从 [1] 开始?末尾的 abc 部分总是排序吗?
-
孔可以从不同的偏移量开始,并且值始终以循环方式排序。
-
两个
memcpys 有性能问题吗? -
如果(整个数组的)元素个数是偶数,并且孔至少是缓冲区的一半(并且开头或结尾没有孔),您可以放心复制
d,然后复制a … c。 -
您是只对通用 C 解决方案感兴趣,还是对特定于体系结构的解决方案感兴趣?