int* a; int* b; a = (int*) malloc(200*1024*1024*sizeof(int)); a = (int*) realloc(a, sizeof(int)); b = (int*) malloc(200*1024*1024*sizeof(int));// b == NULL Error !!! delete a; delete b;
C++ (Qt) a = (int*) malloc(200*1024*1024*sizeof(int)); a = (int*) realloc(a, sizeof(int)); b = (int*) malloc(200*1024*1024*sizeof(int)); qDebug() << a; qDebug() << b;
C++ (Qt) //#1 - Откушано памяти: 19 Мб a = (int*) malloc(400*1024*1024*sizeof(int)); //#2 - Откушано памяти: 1,5 Гб a = (int*) realloc(a, sizeof(int)); //#3 - Откушано памяти: 19 Мб b = (int*) malloc(400*1024*1024*sizeof(int)); //#4 - Откушано памяти: 19 Мб qDebug() << a; qDebug() << b;
C++ (Qt) //#1 - Откушано памяти: 19 Мб a = (int*) malloc(400*1024*1024*sizeof(int)); //#2 - Откушано памяти: 1,5 Гб a = (int*) realloc(a, sizeof(int)); //#3 - Откушано памяти: 19 Мб b = (int*) malloc(399*1024*1024*sizeof(int)); //#4 - Откушано памяти: 1,5 Гб qDebug() << a; qDebug() << b;
a = (int*) malloc(400*1024*1024*sizeof(int)); // ОК получили страницу памяти 1600 MB // Имеем теперь 2 страницы в куче, изначальную, не очень большую и большую на 1600 MB a = (int*) realloc(a, sizeof(int)); // Освободили во второй странице 1600 MB без 4 byte b = (int*) malloc(400*1024*1024*sizeof(int)); // Просим 1600 MB. // В первой странице совсем мало памяти// Во второй странице не хватает 4 байт// Просим у системы новую страницу для програмной кучи под наши 1600 MB, облом, превысили лимит!/* Во втором варианте */ b = (int*) malloc(399*1024*1024*sizeof(int)); // А в данном случае во второй странице памяти хватило (1600 MB - 4 byte > 1596 MB)