Будет ли MATLAB создавать (копировать) новый массив в другой части памяти и снова назначать новый адрес A?
Я бы сказал, что ответ: вероятно,и, конечно, может, но то, действительно ли это так, не обязательно указано в документации по языку (по крайней мере, не то, что я видел).
В общем, потому что Matlab - это передача по значению, копирование-write language, любая модификация данных внутри массива может привести к его перераспределению и копированию, потому что любые другие существующие ссылки на этот массив должны сохранять старое значение.Модификации «на месте» - это просто оптимизация, используемая в определенных случаях, когда Matlab может определить, что значение массива содержится в локальной области действия / рабочей области.Поэтому, если есть какие-либо другие ссылки на этот массив, хранящиеся в A
, то память определенно будет перераспределена и скопирована.
Но если ваше значение массива A
было ограничено этой единственной ссылкой, Matlab теоретически может сохранять ту же выделенную память для базовых значений массива и просто перетасовывать их в пределах одного и того же блока памяти, оставляя часть его неиспользованной в конце.Я сомневаюсь, что это на самом деле так, потому что это приведет к потере памяти, без какой-либо определенной точки, где это будет исправлено в будущем.
С практической точки зрения я бы предположил, что он всегда копируется в недавно выделенный блок памяти.
Вы можете протестировать конкретную версию Matlab, чтобы увидеть, так ли это в вашемнапример, проверяя адреса указателей, возвращаемые mxGetData
в MEX API до и после модификации, или просматривая распределение памяти в профилировщике.