Нет.Кэш не адресуем, поэтому вы не можете размещать в нем объекты.
Похоже, вы хотели спросить: Выделив пространство в виртуальной памяти, могу ли я убедиться, что всегда получаю попадания в кеш?
Это более сложный вопрос, и ответ на него: частично.
Вы определенно можете избежать обмена на диск, используя API управления памятью вашей ОС (например, mlock()
), чтобы пометить регион как нестраничный.Или выделите из «невыгружаемого пула» для начала.
Я не верю, что есть подобный API для закрепления памяти в кэше процессора.Даже если бы вы могли зарезервировать кэш-память процессора для этого блока, вы не можете избежать промахов кэша.Если другое ядро запишет в память, владение будет перенесено, и вы будете страдать от пропуска кэша и связанной с ним передачи шины (возможно, в основную память, возможно, в кэш другого ядра).
Как упоминает Мэтью вего комментарий, вы также можете заставить пропустить кэш параллельно с другой полезной работой в конвейере, так что данные будут в кеше, когда вам это нужно.