Цитата(ArtemKAD @ Nov 19 2013, 23:43)

Если переменная не статическая(не глобальная), то память для нее выделяет компилятор исключительно на время работы использующего ее кода. В остальное время эту-же память/регистры компилятор использует для других не статических переменных. Аналогично с динамически выделяемой памятью из кучи - пока не выполнится malloc (или аналогичное) она физически не распределена и ее место может быть использовано на что угодно.
Как я понимаю, переменные, о которых вы говорите, объявляются внутри использующих их функции. Т.е.
Код
void procedure task_number_0(void)
{
unsigned char a,b,c;
unsigned char d[1000];
...
}
Правильно?
В этом случае место для них выделяется во временной области, доступ к которой происходит не по абсолютным адресам, а по ссылке. Но, по-моему, в этом случае, если переменных много и не удаётся эффективно разместить их по регистрам, резко возрастает размер и время выполнения кода. Кроме того, не получается сослаться на эти переменные в процедурах, написанных на ассемблере.