Предположим, у меня есть функция, которая создает большую структуру (в данном случае огромный std::vector), и цикл, который вызывает ее повторно:
Код: Выделить всё
std::vector render(int w, int h, int time){
std::vector result;
/* heavyweight drawing procedures */
return result;
};
while(loop){
std::vector image = render(800,600,time);
/*send image to graphics card*/
/*...*/
};
Мой вопрос:
в подобных случаях достаточно ли GCC/Clang умен, чтобы избежать выделения памяти для этого огромного массива 800x600x4 на каждой итерации? Другими словами, работает ли этот код так:
Код: Выделить всё
void render(int w, int h, int time, std::vector& image){ /*...*/ }
std::vector image;
while(loop){
render(800,600,time,image);
/*...*/
}
Почему вопрос: я делаю компилятор с языка на C++, и мне нужно решить, каким путем мне идти; если я скомпилирую его, как первый пример или как последний. Первый из них был бы тривиален; для последнего потребуется сложное программирование, но оно того стоит, если оно будет значительно быстрее.
Подробнее здесь:
https://stackoverflow.com/questions/201 ... ying-there