Интерфейс безблокировочного (lock-free) менеджера памяти.
Содержит прототипы функций безблокировочного менеджера памяти уровня CPC.
typedef struct CPC_LFMM_CONFIG_ {
CPC_INTERLOCKED_FUNCS interlockedFuncs;
LPVOID Buffer;
LONG Size;
BOOL fSMP;
BOOL fStat;
LONG * PoolSizes;
DWORD nPools;
DWORD nCPUs;
} CPC_LFMM_CONFIG, *LPCPC_LFMM_CONFIG;
Члены
- interlockedFuncs
-
Настройки примитивов синхронизации (Структура CPC_INTERLOCKED_FUNCS).
- Buffer
-
Указатель на блок памяти, из которого будет осуществляться распределение.
- Size
-
Размер в байтах блока памяти, из которого будет осуществляться распределение. Должен быть больше или равен суммы размеров пулов (PoolSizes) + 65536.
- fSMP
-
Признак того, что система может иметь более одного процессора и требуется синхронизация шины. Рекомендуется значение TRUE. Значение FALSE повышает производительность, но приводит к нестабильной работе на многопроцессорных системах.
- fStat
-
Признак необходимости сбора статистики использования.
- PoolSizes
-
Таблица размеров пулов памяти. Для CSP версии 3.6R3, например, при стандартном использовании в реализации IPsec рекомендуется следующее заполнение:
LONG PoolSizes[16];
...
memset(PoolSizes, 0, sizeof (PoolSizes));
PoolSizes[MP_PRIME_M] += 2*1024 * (MAX_SPI) + 1024*1024;
PoolSizes[MP_SEC_M] += 2*1024 * (MAX_SPI) + 1024*1024;
PoolSizes[MP_BIG] += 2*1024 * (MAX_SPI) + 1024*1024;
PoolSizes[MP_WORK] += 64*1024 * (MAX_SPI) + 5*1024*1024;
PoolSizes[MP_WORK_M] += 128*1024; . - nPools
-
Количество пулов памяти. Для CSP версии 3.6 и выше рекомендуется значение 16.
- nCPUs
-
Количество процессоров в системе. Оптимизационный параметр. Рекомендуется значение 2 для двухпроцессорных систем.