Память использовать при кастинге? [С] - PullRequest
3 голосов
/ 08 февраля 2010

Это больше вопрос теории, чем любой реальный код. Я понимаю, что если вы объявите переменную int i; затем он выделяет 4 байта в памяти для целого числа i. Я понимаю, если вы используете malloc для создания вашей памяти.

Мне любопытно, как обрабатывается память, когда вы делаете что-то вроде

int x;
int y;
double z;

z = (float)x/(float)y;

Когда вы разыгрываете так, как обрабатывается память. Программа создает поплавки и сохраняет x и y, а затем выполняет деление? Или это что-то вне памяти?

Спасибо за любые объяснения!

Ответы [ 2 ]

2 голосов
/ 08 февраля 2010

Да, простой способ - создать временные переменные - обычно в стеке. В некоторых случаях компилятор может оптимизировать создание ненужных временных переменных. Если вам действительно все равно, посмотрите на произведенную разборку.

0 голосов
/ 08 февраля 2010

Это, конечно, полностью зависит от реализации и зависит от платформы. Кстати, sizeof(int) не обязательно 4, как вы говорите.

Для вашего кода один из возможных выводов может быть (от макушки моей головы):

fild [x] // load x from the stack into a register
fidiv [y] // divide by y loaded from the stack
fstp [z] // store the result in z

Это будет на процессоре с FPU.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...