в одной программке обнаружилась ошибка при работе с памятью.
ошибка проявляется только если суммарный размер блоков > 4G если меньше тест проходит миллиард итераций без проблем.
количество итераций до появления ошибки не постоянно.
ниже минимальный код воспроизводящий ошибку, учет выделенной памяти тут не ведется.
Причем ошибка проявляется даже если выделенные блоки вообще не используются.
У кого имеется физической памяти 8 и более Gb проверьте плз, воспроизводится ли ошибка у вас. Но будьте осторожны, у меня один раз система ушла в полный ступор, пришлось перегружать (в той версии теста я заполнял выделенные блоки данными).
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define COUB (16*1000*1000)
typedef void *ptr;
ptr arb[COUB];
void main() {
int cn,na,szn;
ptr pb;
// init:
for (cn=0; cn < COUB; cn++) arb[cn]=NULL;
// test:
for (cn=0; cn < (1000*1000*1000); cn++) {
if ((cn & 0xFFFF)==0) printf("cn=%d \n",cn);
na =(rand())% COUB;
pb=arb[na];
if (pb != NULL) {
free(pb);
arb[na]=NULL;
} else {
szn =(rand()) % 2048;
if (szn < 32) szn=32;
pb=malloc(szn);
if (pb==NULL) {
printf(" !!! malloc()==NULL szn=%u (cn=%u) \n",szn,cn); exit(0); };
arb[na]=pb;
};
};
};