Я знаю, что компилятор (по крайней мере G CC) может быть принудительно помещать определенные c функции в определенные c секции.
Например, рассмотрим функцию foo.
int foo(int a, int b, int c);
Переписав следующим образом, компилятор генерирует исполняемый двоичный файл ELF с функцией, помещенной в секцию вывода .custom
. (Это также приводит к тому, что функция in-line не вызывается, потому что мне нужно, чтобы эти функции вызывались из их определенных c позиций памяти, а не просто реплицировались компилятором.)
#define CUSTOMIZE __attribute__((__section__(".custom"))) __attribute__ ((noinline))
int CUSTOMIZE foo(int a, int b, int c);
Итак, мой вопрос таков: возможно ли сделать это автоматически для определенных c операторов или блоков внутри функции?
Очевидно, что один из способов сделать это - просто извлечь эти части (скажем, для l oop, например, или утверждение 3) и поместить их в определенные c функции, но это слишком сложная операция и не масштабируется для меня. Есть идеи?
int foo(int a, int b, int c)
{
// Statement 1
// Statement 2
// Statement 3
// For Loop Block
for ( ... )
{
// For loop body
}
return some_value;
}
РЕДАКТИРОВАТЬ
То, что я ищу, является чем-то эквивалентным следующему. Там, где For
l oop выделено в отдельную функцию, я могу разместить ее в своем пользовательском разделе.
Надеюсь, теперь мои намерения прояснятся. Моя цель - просто узнать, есть ли способ сделать это автоматически с помощью компилятора без извлечения этих частей вручную (плюс я также должен управлять аргументами ... et c. Короче говоря, слишком много операций).
int CUSTOMIZE my_isolated_for_loop( some_arguments_here )
{
// Place my for loop here, with the correct
// For Loop Block
for ( ... )
{
// For loop body
}
return result
}
int foo(int a, int b, int c)
{
// Statement 1
// Statement 2
// Statement 3
intermediate_result = my_isolated_for_loop( some_arguments_here )
return some_value;
}
Спасибо.