Я действительно удивлен, что я не мог найти этот вопрос, который уже задан. Мне интересно, сколько кода занимает оператор switch, и если использование таблицы поиска const будет более эффективным для моих нужд.Сколько кода занимает оператор switch?
typedef struct container{
type1 a;
type2 b;
type3 c;
}container;
static container d;
//option A
void foo(int num)
{
void* x;
switch (num)
{
case 1:
x = &d->a;
break;
case 2:
x = &d->b;
break;
case 3:
x = &d->c;
break;
default:
x = NULL;
break;
}
// do something with x
}
// option B
const void* lookup_table[] = {
d.a,
d.b,
d.c,
NULL
};
void foo(int num)
{
void* x = lookup_table[num];
// do something with x
}
Как бы оператор switch разбился на сборку и насколько он был бы больше в кодовом пространстве? Стоит ли использовать таблицу поиска вместо использования оператора switch?
Запустил файл с помощью 'gcc -S' help? – ace
Мой фактический корпус коммутатора составляет примерно 50, и каждый байт имеет значение –
Как @ace говорит, если вы запустите gcc -S foo.c, вы получите сборку в файле foo.s, и вы увидите код, который генерируется для вашего switch. – bruceg