1 Востаннє редагувалося Betterthanyou (02.08.2014 21:24:39)

Тема: Створення змінних та компіляція програм в Visual Studio 2013

1) Якщо написати глобальний int i

int i=180/2;

то при звернені до ' i ' кожний раз ПК обраховує скільки буде дорівнювати ' i ' чи лише один раз а інші видавати готовий результат ?
2) Чому при компіляції створюється 32-бітна програма а не 64 як настроїти компілятор Visual Studio 2013 для створення 64 бітних програм ? (інформацію про програму я дізнався із PlayClaw 5)

Post's attachments

OpenGL 32 bit.png 1.11 kb, 209 downloads since 2014-08-02 

2

Re: Створення змінних та компіляція програм в Visual Studio 2013

то при звернені до ' i ' кожний раз ПК обраховує скільки буде дорівнювати ' i ' чи лише один раз а інші видавати готовий результат ?

Залежить від оптимізації компілятора (якщо вимкнути - то буде рахувати).

перемінних

змінних.

Подякували: Betterthanyou1

3

Re: Створення змінних та компіляція програм в Visual Studio 2013

Не знаю що там VS, але gcc такі випадки навіть при вимкненій оптимізації зразу рахує. Ось що я отримав від objdump

00000000004004ac <main>:
  4004ac:       55                      push   %rbp
  4004ad:       48 89 e5                mov    %rsp,%rbp
  4004b0:       c7 45 fc 5a 00 00 00    movl  $0x5a,-0x4(%rbp)
  4004b7:       8b 45 fc                mov    -0x4(%rbp),%eax
  4004ba:       5d                      pop    %rbp
  4004bb:       c3                      retq 

на такий код

int main()
{
  int i = 180/2;
  return i;
}
Подякували: Betterthanyou1

4

Re: Створення змінних та компіляція програм в Visual Studio 2013

1) Значення змінної при ініціалізації обчислюється, очевидно, один раз (вдруге це буде вже не ініціалізація, а присвоєння). Глобальні змінні ініціалізуються рівно один раз, при старті програми - відповідно, один раз і буде задаватися значення. Але всі арифметичні вирази з констант обчислюються компілятором, тому цей код повністю еквівалентний

int i = 90;

що й показує нам drWoZD. Це навіть не оптимізація коду - це просто визначений режим роботи компілятора.
2) http://www.viva64.com/en/l/0004/

Подякували: 0x9111A, Betterthanyou, Logans3