Если вас интересует производительность - важно понимать иерархию памяти.
Для небольших наборов данных, которые полностью содержатся в физической памяти, вам нужно заняться кэшированием (доступ к памяти из кэша намного быстрее).
При работе с большими наборами данных, которые могут быть выгружены из-за нехватки физической памяти, вам следует соблюдать осторожность, чтобы шаблоны доступа были локализованы.
Например, если вы объявляете матрицу в C (int a[rows][cols]
), она распределяется по строкам. Таким образом, при сканировании матрицы вам нужно сканировать по строкам, а не по столбцам. В противном случае вы будете пейджировать одни и те же данные много раз.
Другая проблема заключается в разнице между грязными и чистыми данными, хранящимися в памяти. Чистые данные - это информация, загруженная из файла, который не был изменен программой. ОС может выводить чистые данные (возможно, в зависимости от того, как они были загружены), не записывая их на диск. Грязные страницы должны быть сначала записаны в файл подкачки.