Теория динамических массивов
Таким вот вопросом задался: есть, допустим, массив
var
DynArr:Array of byte;
и, допустим, выделяем ему памяти кусочек
SetLength(DynArr,100000);
и дальше работа кипит. А потом понадобилась ещё память, и говорим:
SetLength(DynArr,10000000);
Будет ли новообразованный блок памяти на том же адресе, и не будет ли он перекрывать другие данные?
И ещё. Постоянно резидентом висит machine debug manager. Если в двух словах, что это за зверь такой, и можно ли его как использовать?
Type
DA:array of byte;
PDA:^DA;
Var
DynArr:DA;
SP,P:PDA;
Begin
SetLength(DynArr,100000);
SP:=@DynArr;
...
SetLength(DynArr,10000000000);
P:=@DynArr;
If SP=P
then
ShowMessage('Адрес тот же')
else
ShowMessage('Адрес не тот же');
End.
Думаю должно пойти (у меня сейчас Делфи нет - проверить не могу). А данные не будут перекрываться , иначе зачем были бы нужны динамические массивы ? Извиняюсь если не так понял вопрос .
SetLength(DynArr,100000);
не означает что ты выделяеш память а означает что ты создал массив длинной 100000 а программа за тебя выделит необходимую память.
Если ты увеличиваеш число допустим в 2 раза
SetLength(DynArr,200000); то утебя к концу массива добавяться несколько значений причем ты ничего не теряеш из предидущих данных,
SetLength(DynArr,50000);
если ты сократишь число в 2 раза то массив урежется соответсвенно в 2 раза
machine debug manager.
Это просто дебагер поставляемый с офисом. используй как нибудь :)