CPU любят предварительную выборку.
Если вы собираетесь линейно перемещаться ваши данные в следующем порядке ...
abcabcacb...
... тогда вылучше (с точки зрения производительности) с решением № 1.Если вы собираетесь получить к ним доступ как:
aaa...bbb..ccc...
..., тогда перейдите к решению № 2.
Однако , если вы не собираетесь делатьлинейный обход или, если вы на самом деле не тестировали свой код и пришли к выводу, что вам действительно нужно выжать каждую последнюю каплю производительности из этого куска кода, сделайте вашу поддержку удобной для себя и придерживайтесь Решения № 1.
--- EDIT ---
В многопоточной среде физическое расположение данных может привести к ложному совместному использованию .По сути, сохранение слишком близко к фрагментам данных, к которым одновременно обращаются разные потоки, может привести к конфликту в кэше и разрушить масштабируемость.
Итак, если вы одновременно обращаетесь к a
из одного потока иb
от другого, возможно, стоит разделить их физически и реализовать решение № 2.Если, с другой стороны, вы получаете доступ к двум «братьям и сестрам» a
s, придерживайтесь решения # 1.
--- EDIT 2 ---
Для отличного рассмотрения этого предмета я настоятельно рекомендую выступление Херба Саттера «Вещи, на которых язык программирования никогда не говорил вам», по-прежнему доступно по адресу:
http://video.google.com/videoplay?docid=-4714369049736584770 http://www.nwcpp.org/Downloads/2007/Machine_Architecture_-_NWCPP.pdf