Я бы сказал, «производительность», плюс тот факт, что это даже возможно, иногда удивляет программистов на Си.Это не ... в общем "аромате" C, для многих, разбрасывать большие вещи, такие как структуры, как если бы они были просто ценностями.Которые, в зависимости от языка, на самом деле таковы.
В то же время многие программисты на Си, похоже, автоматически прибегают к memcpy()
, когда возникает необходимость копировать структуры, а не просто использовать присваивание.
По крайней мере, в C ++ есть нечто, называемое «оптимизацией возвращаемого значения», которое способно беззвучно преобразовывать код следующим образом:
struct Point { int x, y; };
struct Point point_new(int x, int y)
{
struct Point p;
p.x = x;
p.y = y;
return p;
}
в:
void point_new(struct Point *return_value, int x, int y)
{
struct Point p;
p.x = x;
p.y = y;
*return_value = p;
}
, которыйпокончит с (потенциально стековым) «истинным» возвратом значения структуры.Я думаю, что еще лучше было бы это, не уверен, что они такие умные:
void point_new(struct Point *return_value, int x, int y)
{
return_value->x = x;
return_value->y = y;
}
Я не уверен, что компиляторы C могут сделать это, если они не могут, то я думаю, что это можетбыть реальным аргументом против структурных возвратов для очень критичных к производительности программ.