Предположим, у меня есть классы foo < handle
и bar < foo
, baz < foo
и, возможно, qux < foo
. Есть несколько способов, которыми я могу хранить массив этих объектов:Что лучше для производительности, массивов ячеек объектов или гетерогенных массивов?
В массиве ячеек:
A = {foo bar baz qux} % A(1) would be a cell, A{1} gives me a foo object
Начиная с R2011a, я могу сделать
foo <
matlab.mixin.Heterogeneous
, а затем построить directy массив:A = [foo bar baz qux] % A(1) directly gives me a foo object
как я понимаю, с точки зрения обслуживания, было бы лучше использовать второй метод, а не первый, таким образом, она удаляет неоднозначность о том, как получить доступ к A
. А именно, когда нам нужно разыгрывать элементы массива ячеек (ячейка A(1)
vs foo
объект A{1}
, который живет внутри A(1)
).
Но есть ли какая-либо память или штраф за производительность (или выгода) за использование одного синтаксиса против другого?
Я был бы удивлен, если бы вы могли видеть разницу в производительности. Создайте оба объекта и сделайте 'whos', чтобы увидеть их соответствующие размеры. – Floris
@Floris Я сделал это, и похоже, что реализация гетерогенных массивов занимает 104 байта, а массив ячеек занимает целую 864! Однако определение объекта 'foo' само по себе, по-видимому, также занимает 104 байта. Поэтому я не понимаю, что происходит внутри гетерогенной реализации ... –
Проклятие matlab.Никто не знает, что происходит за занавеской, и Матлиб никогда не интересовался рассказом людям о своих секретах. – patrik