Zakładając, że posiada struct
C/C++ z elementów macierzy stałym rozmiarze, npCzy kompilator zoptymalizuje funkcje zwracające struktury z macierzami o ustalonych rozmiarach?
#define SIZE 10000
struct foo{
int vector_i[SIZE];
float vector_f[SIZE];
};
i am, aby utworzyć funkcję powróci instancją foo
jak:
foo func(int value_i, float value_f){
int i;
foo f;
for(i=0;i<SIZE;i++) f.vector_i[i] = value_i;
for(i=0;i<SIZE;i++) f.vector_f[i] = value_f;
return f;
}
Gdybym wywołania funkcji przy użyciu:
foo ff = func(1,1.1);
będzie kompilator wykonać jakąś optymalizację (tj TCO)?
Czy wykonywalny wypełnić bezpośrednio ff
zmienną, czy będzie to wypełnienie pierwszy f
z func
a następnie skopiować wszystkie wartości z f
do ff
?
Jak mogę sprawdzić, czy optymalizacja jest wykonywana?
Jest to dość ogromny obiekt być przechowywane w postaci zmiennej lokalnej. Jeśli wyliczyłem to poprawnie, powinno to być 625kb (na 32-bitowej platformie), gdy w oknach wydaje mi się, że każdy stos wątków może wynosić do 1mb – GeorgeAl
Przekaż zamiast tego wskaźnik (lub odwołanie) do struktury jako argumentu, a po prostu nie " Nie martw się o to. –
Możesz spojrzeć na wygenerowany asembler. W C++ można również zdefiniować konstruktor kopii i sprawdzić, czy zostanie wywołany. –