КриптоПро CSP  

CPC_LFMM_CONFIG_

Интерфейс безблокировочного (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 для двухпроцессорных систем.