Opened 10 years ago
Last modified 7 years ago
#3844 assigned defect
Unnecessary array instantiations — at Version 2
| Reported by: | Rüdiger Franke | Owned by: | somebody |
|---|---|---|---|
| Priority: | high | Milestone: | 2.0.0 |
| Component: | Frontend | Version: | |
| Keywords: | Cc: | Niklas Worschech, Francesco Casella |
Description (last modified by )
Examples that use arrays often result in huge code because OpenModelica instantiates these arrays over and over again. Have for instance a look the Modelica.Media.Examples.R134a.* examples.
Here is a simpler version:
package ArrayData constant Integer[:] cdata = {1, 2, 3, 4, 5, 6, 7, 8, 9}; function f input Integer[:] idata; input Integer idx; output Integer y; algorithm y := idata[idx] + cdata[idx] + cdata[idx + 1]; end f; model Test input Integer idx = 0; parameter Integer[:] pdata = cdata; Integer y = f(pdata, idx+1); end Test; end ArrayData;
ArrayData.Test is instantiated to:
function ArrayData.f input Integer[:] idata; input Integer idx; output Integer y; algorithm y := idata[idx] + {1, 2, 3, 4, 5, 6, 7, 8, 9}[idx] + {1, 2, 3, 4, 5, 6, 7, 8, 9}[1 + idx]; end ArrayData.f; class ArrayData.Test input Integer idx = 0; parameter Integer pdata[1] = 1; parameter Integer pdata[2] = 2; parameter Integer pdata[3] = 3; parameter Integer pdata[4] = 4; parameter Integer pdata[5] = 5; parameter Integer pdata[6] = 6; parameter Integer pdata[7] = 7; parameter Integer pdata[8] = 8; parameter Integer pdata[9] = 9; Integer y = ArrayData.f({pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], pdata[6], pdata[7], pdata[8], pdata[9]}, 1 + idx); end ArrayData.Test;
It is bad if a temporary array is created when calling the function f, instead of just passing pdata. It is worse if the whole cdata array is created temporarily again and again whenever the function f wants to access one element of it.
Change History (2)
comment:1 by , 10 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 10 years ago
| Description: | modified (diff) |
|---|
Note:
See TracTickets
for help on using tickets.
