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,
});
}
}
не помогло.