How to Make a Huge Struct Accessible to Many Functions?

10 ビュー (過去 30 日間)
Rightia Rollmann
Rightia Rollmann 2017 年 3 月 17 日
回答済み: Image Analyst 2017 年 3 月 17 日
I have a huge struct loaded by a function. I have other functions that will use some of the fields of the struct to calculate something. What is the best way to make this struct accessible to all other functions? More info: this struct will only be read and no information by other functions will be overwritten on it.
  1 件のコメント
Adam
Adam 2017 年 3 月 17 日
I'm not really sure how this question differs from this one where you appeared to be asking the same thing and Steven Lord gave you a link that explains about sharing between callbacks.
The answer in general is still the same, though with specific code, which you haven't included, may vary.
The fact that you have a 'huge struct' needed by many functions in the first place sounds like the start of the problem. Functions should ideally be given no more than they need to perform their own task within the overall system.

サインインしてコメントする。

採用された回答

Jan
Jan 2017 年 3 月 17 日
Avoid globals, because they impede the debugging and expanding of code.
If y struct is provided as input, only the struct pointer is copied, but Matlab does not duplicate the contents of the struct. Therefore it does not matter if the struct is huge or tiny. Forwarding the struct as an input will work efficiently. As long as you do not reply the struct as output, there is no danger of changing its contents "by accident".
But Adam's objection is correct in general: Providing all information to all subfunctions seems to be a bad design. If the code is large and written by multiple programmers, a modification of this struct will be dangerous, because it is hard to check, which functions are effected. The less data are forwarded, the less side-effects must be checked for modifications. Or in other words: The leaner the code, the less chances to fail.
Phew, don't ask me for a proof :-)

その他の回答 (2 件)

KSSV
KSSV 2017 年 3 月 17 日
Read about global. Make your structure a global variable, hence you can access in any function without sending into the function.

Image Analyst
Image Analyst 2017 年 3 月 17 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by