C++ (Qt)// array1 располагается сначала памяти, следом находиться array2, потом лежит массив datachar *array1 = new char[ 0x10 ]; // array1 = 0x0000char *array2 = new char[ 0x10 ]; // array2 = 0x0010char *data = new char[ 0x100 ]; // data = 0x0020 // Освобождаем array1 и array2delete []array1;delete []array2; // Имеем пустой блок сначала памяти 0x0000 - 0x001F, и далее массив data// Логично было бы подвинуть блок data в начало памяти, но сделать это нельзя, т.к. переменной data присвоенно конкретное значение 0x0020// и если сдвинуть массив data в начало памяти, то нужно будет откорректировать значение в переменной data на 0x0000.// А мы может сделать несколько копий этого указателя:char *ptr = data;char *var = ptr; // Значит для корректного перемещения массива, нужно исправить и все эти переменные, а вот отследить это практически не возможно.// Поэтому, в тех языках, где отказались от прямой адресации (указателей), можно применять всякие сборщики мусора, которые могут двигать блоки// в памяти как угодно, но делается это не средствами ядра ОС, а соответствущими runtime библиотеками.