ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
386547
dimonomid (11.02.2013 10:48, просмотров: 670)
C30: стек и временные структуры Рассмотрим следующий код: typedef struct { int a; int b; } T_TestStruct1; void test1(T_TestStruct1 *p_test_struct) { /* do something */ } И вот такие вызовы test1() : void some_function() { { T_TestStruct1 par = { .a = 1, .b = 1, }; test1(&par); } { T_TestStruct1 par = { .a = 2, .b = 2, }; test1(&par); } } Тут все как надо: в стеке выделено место только под одну структуру T_TestStruct1. Но мне нравится более краткая запись: void some_function() { test1(&(T_TestStruct1){ .a = 1, .b = 1, }); test1(&(T_TestStruct1){ .a = 2, .b = 2, }); } А вот тут уже, почему-то, в стеке выделяется память под обе структуры. По-моему, это лишнее. Может, я чего-то не понимаю, и у компилятора есть причины так делать? Есть какие-нибудь идеи, как заставить его повторно использовать память под такие временные структуры? На всякий случай, попробовал так: void some_function() { { test1(&(T_TestStruct1){ .a = 1, .b = 1, }); } { test1(&(T_TestStruct1){ .a = 2, .b = 2, }); } } не помогло.