C ++ Уменьшить размер страницы памяти с 4096 байт - PullRequest
3 голосов
/ 12 декабря 2010

Теперь в моей системе (debianx64) размер страницы составляет 4096 байт. Есть ли возможность уменьшить его? Я хотел бы хранить в памяти много маленьких кусочков, но даже за 1 байт я не могу использовать другие 4095 из-за того, что здесь добавлено 1-е сообщение Это правда или я не прав? Возможно ли это сделать? Спасибо за ответы.

Ответы [ 3 ]

10 голосов
/ 12 декабря 2010

Нет.

4096 - это наименьший размер страницы, предоставляемый платформой x86.Это ограничение, налагаемое процессором.Он предлагает большие размеры (до 4 МБ, в зависимости от режима), но обычно он выбирается операционной системой во время загрузки.

Что вы можете сделать, это сделать относительно большое распределениев качестве резервного хранилища для пула объектов .Тогда, если вам нужно много маленьких объектов, все они могут быть сохранены в пределах одной страницы или области памяти.Это общая идиома для улучшения производительности при распределении памяти.

Более того, большинство нормальных распределителей памяти работают так или иначе, поэтому нет необходимости реализовывать пул объектов, если вы не найдете в профилировании то, что вам нужно.

1 голос
/ 12 декабря 2010

Размер страницы (которую BTW нельзя снизить ниже 4K на платформах x86) скорее всего не имеет отношения к вашей ситуации Если вы размещаете данные в куче, вопрос размера страницы не будет возникать так, как вы предполагаете.

1 голос
/ 12 декабря 2010

Размер страницы - это элемент для всей ОС.Вы не можете просто создать новый размер страницы для своего приложения только потому, что логика сбоя страницы должна работать со всеми другими процессами.

Я не уверен, что именно вы пытаетесь сделать.Я скажу, что если вы даже беспокоитесь об этой проблеме, то вам нужно сделать свое программное обеспечение более кеш-ориентированным путем последовательного хранения и доступа к памяти, как в массиве.

...