Здравствуйте, WoldemaR, Вы писали:
WR>Ситуация следующая:
WR>есть большой массив(объём — мегабайты) из которого обрабатывается 1 строка (объём — килобайты).
WR>Обращения к этой строке происходят очень часто внутри больших циклов.
WR>адрес обращения вычисляется, но всегда остаётся в рамках строки.
WR>есть подозрение, что каждый раз происходит обращение к памяти, хотя (внимание) вся строка может поместиться в кеш процессора.
Это странно, вроде кеш для такой ситуации и разрабатывали: есть большая память, обращение происходит к небольшому кусочку, адрес вычисляется...
Такое может быть, если помимо этой строчки постоянно обращаешься ещё куда-то, тогда несколько областей памяти поочереди прописываются в кеш. Но, к счастью, обычно кеш многослойный — как минимум, двух, так что на стек и большой массив должно хватать.
WR>вопрос — можно ли сказать компилятору чтобы он поместил в кеш некий участок памяти,
Компилятор такими вопросами не занимается
И даже линкер. Может и можно сделать что-то на этапе выполнения, но скорее всего стандартных прагм для этого нет. В x86 ассемблер позволяет как-то управлять кешем, но подробностей я не знаю, и вставлять в код ассемблерные команды не рекомендую, если это не критически необходимо.
WR>а если нельзя, то как можно оптимизировать такую ситуацию?
Наверное, сократить обращения к другим участкам памяти и выровнять по границе кеш-линии.