Когда стековое пространство выделяется для локальных переменных?

Я уверен Вы, mustve встретился этот статья от W3. Существует много для приобретения знаний из той статьи. В коротком XHTML выносит правила xml помимо наличия набора HTML тегов. Наиболее важные различия:

* XHTML elements must be properly nested
* XHTML elements must always be closed
* XHTML elements must be in lowercase
* XHTML documents must have one root element

11
задан Neal Stublen 6 November 2009 в 15:15
поделиться

5 ответов

Компилятор может делать все, что захочет, до тех пор, пока семантика языка зарезервирована . Другими словами,

6
ответ дан 3 December 2019 в 05:34
поделиться

Нет никаких гарантий.

Различные флаги оптимизации, вероятно, приведут к разным методам сохранения переменных.

Компилятор может даже сделать одну или несколько переменных не использовать стек вообще и хранить их в регистрах на все время выполнения функции.

8
ответ дан 3 December 2019 в 05:34
поделиться

Насколько я понимаю, вы даже не можете получить никакой гарантии, что эти переменные размещены в стеке, они могут храниться в регистрах.

На что вы действительно можете повлиять:

  • Совет компилятору поместить переменную в регистр, используя register ключевое слово.

  • Помогите компилятору локализовать область видимости переменной, переместив объявление как можно позже:

    int f(void )  
    {
        /* var1 and var2 probably use the same place for storage. */
        {
             int var1;
             /* ... do something */
        }

        {
             int var2;
             /* ... do something */
        }
    }


  • Даже при заданной инициализации задержки заданной области:
{
   int i; /* Yes, you must declare it at the begin of block.

   /* Do something... */

   i = START_VALUE;
   /* But you need it only here and below... */
}
4
ответ дан 3 December 2019 в 05:34
поделиться

Если переменные будут помещены в стек, пространство стека выделяется в начале функции перед первым оператором в функции. Указатель стека будет перемещен вверх (или вниз) на общее количество байтов для хранения всех локальных переменных.

3
ответ дан 3 December 2019 в 05:34
поделиться

, если "check_something ()" легко оценивается как 0, весь этот блок будет оптимизирован с использованием достаточно высокого уровня оптимизации. Да, это зависит от компилятора. Как правило, если вы проверяете возвращаемое значение вызова функции, оно не будет оптимизировано. Лучший способ приблизиться к этому - это скомпилировать его и посмотреть на дизассемблирование файла, чтобы убедиться, что, по вашему мнению, происходит на самом деле.

0
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: