// не умещается на стек
 double m[100000000] = {}; // 80 Mb
 // => segmentation fault or access violation error
Стандартная библиотека cstdlib предоставляет четыре функции для управления памятью:
 void * malloc (size_t size);
 void free (void * ptr);
 void * calloc (size_t nmemb, size_t size);
 void * realloc (void * ptr, size_t size);
size_t - специальный целочисленный беззнаковый тип, может вместить в себя размер любого типа в байтах. ( int‘a не всегда достаточо)size_t используется для указания размеров типов данных, для индексации массивов и пр.void * - это указатель на нетипизированную память (раньше для этого использовалось char *)malloc - выделяет область памяти размера >= size. Не кратный размер памяти выделяется по следующим причинам
    calloc - выделяет массив из nmemb размера size. Данные инициализируются нулём.realloc - изменяет размер области памяти по указателю ptr на size (если возможно, то это делается на месте).free - освобождает облать памяти, ранее выделенную одной из функций malloc/calloc/realloc.sizeof.
     // create an array of 1000 int
 int * m  = (int *)malloc(1000 * sizeof(int));
 m[10] = 10;
 // change array size to 2000
 m = (int *)realloc(m, 2000 * sizeof(int));
 // free memory
 free (m);
 // create an array of int and inicialize it with 0
 m = (int *)calloc(3000, sizeof(int));
 free(m);
 m = 0; // best practise
new и delete - для одиночных значений,new[] и delete[] - для массивов.delete должна соответствовать версии оператора new.
     // выделение памяти под один int со значением 5
 int * m = new int(5);
 delete m; // освобождение памяти
 // создание массива нулей
 m = new int[1000];
 delete [] m; // освобождение памяти
 int * m = new int[1000];
 m = new int[2000]; // потеряли указатель но массив из 1000 элементов => утечка памяти
 // не вызван delete [] m => утечка памяти
 int * m1 = new int[1000];
 delete m1; // должно быть delete [] m1;
 int *p = new int(0);
 free(p); // совмещение функций С++ и С
 int *q1 = (int*) malloc (sizeof(int));
 free(q1);
 free(q1); // двойное удаление
 int *q2 = (int*) malloc(sizeof(int));
 free(q2);
 q2 = 0;
 free(q2); // правильно работает для q2 = 0;