Я создаю приложение, которое будет иметь динамически выделенные объекты типа A, каждый из которых имеет динамически выделенный член (v), аналогичный приведенному ниже классу.
class A {
int a;
int b;
int* v;
};
куда:
- Память для v будет выделена в конструкторе.
- v будет выделен один раз при создании объекта типа A, и никогда не потребуется изменять его размер.
- Размер v будет варьироваться для всех экземпляров A.
Приложение потенциально может иметь огромное количество таких объектов и, в основном, должно передавать большое количество этих объектов через ЦП, но только для выполнения очень простых вычислений над переменными-членами.
- Может ли динамическое выделение v означать, что экземпляр A и его элемент v не находятся в памяти вместе?
- Какие инструменты и методы можно использовать для проверки того, является ли эта фрагментация узким местом в производительности?
- Если такая фрагментация является проблемой производительности, существуют ли какие-либо методы, позволяющие A и v размещаться в непрерывной области памяти?
- Или существуют какие-либо методы для облегчения доступа к памяти, такие как схема предварительной выборки? например, получить объект типа A, работающий с другими переменными-членами при предварительной выборке v.
- Если бы размер v или допустимый максимальный размер мог быть известен во время компиляции, приведет ли замена v массивом фиксированного размера, например int v[max_length], к лучшей производительности?
Целевыми платформами являются стандартные настольные компьютеры с процессорами x86/AMD64, ОС Windows или Linux, скомпилированные с использованием компиляторов GCC или MSVC.
A
— 16 байт, аv
— 512 КБ, маловероятно, что они окажутся рядом друг с другом. И -1 за предложение грязных хаков, не зная, действительно ли это нужно ОП. 26.05.2010