Size: a a a

Compiler Development

2020 February 08

p

polunin.ai in Compiler Development
А использоваться будет только нужная
источник

SS

Sergey Sverdlov in Compiler Development
Nikolay
Подскажите. Правильно ли утверждение, что размещение памяти на стеке для функции определяется во время компиляции. Ну вот в простейшем примере ясно ,что если сразу идёт int x; int y, то можно на стэке выделать по 4 байта для каждой переменной , но если это под условием if? Например так if (something){ intx,y ....} else { double z ...} тут же получается ,что на этапе компиляции нельзя понять сколько памяти понадобится на стеке ?
Утверждение правильное. Память для x, y с одной стороны и z - с другой (в примере с if) можеть быть выделена в одном и том же месте, поскольку их области видимости не пересекаются. Но может быть и в разных местах - зависит от реализации. В любом случае во время компиляции.
источник

DP

Dmitry Ponyatov in Compiler Development
если не
double z[0x99999]
источник

TS

Timur Safin in Compiler Development
а распределение минимальной памяти и регистров посредством раскраски графа это ведь Ершов? И сейчас я что-то с налету не смог нагуглить источники? только презентации типа такой http://conf.nsc.ru/files/conferences/opcs2019/535107/30_Kasyanov.pdf
источник

TS

Timur Safin in Compiler Development
"Введение в теоретическое программирование" где это вроде бы вводилось в каком-то адовом виде доступна http://ershov.iis.nsk.su/ru/node/801528
источник

SS

Sergey Sverdlov in Compiler Development
Здесь ли про раскраску графа - не помню. Пролистал оглавление - там полкниги про раскраску.
источник

PS

Peter Sovietov in Compiler Development
источник

PS

Peter Sovietov in Compiler Development
Это идея Лаврова и Ершов в «Сведение задачи распределения памяти при составлении программ к задаче раскраски вершин графов» (1962) на нее ссылается.
источник

TS

Timur Safin in Compiler Development
самое оно, спасибо!
источник

N

Nikolay in Compiler Development
а какую книгу стоит почитать вот именно по этой задаче - чтобы понять как компилятор выделяет память на этапе компиляции?
источник

BD

Berkus Decker in Compiler Development
Dmitry Ponyatov
если не
double z[0x99999]
это тоже на стеке
источник

PS

Peter Sovietov in Compiler Development
Nikolay
а какую книгу стоит почитать вот именно по этой задаче - чтобы понять как компилятор выделяет память на этапе компиляции?
Исключительно по распределению регистров, насколько мне известно, книг нет. Это и понятно — ведь данный этап тесно связан с другими этапами компиляции: анализ потоков данных, выбор/планирование команд. Поэтому имеет смысл посмотреть книгу по организации заднего плана (backend) компилятора. Например, Мучника.
источник

BD

Berkus Decker in Compiler Development
Nikolay
а какую книгу стоит почитать вот именно по этой задаче - чтобы понять как компилятор выделяет память на этапе компиляции?
Обычно задача сводится к тому, чтобы запихать локальные данные в как можно более быструю память. А дальше все зависит от того, под какое железо генерируется код - есть ли там регистры, например, есть ли стек, есть ли ОЗУ.
источник

BD

Berkus Decker in Compiler Development
Ну и не все языки делают аллокации на куче автоматически - Си например не делает (либо стек либо регистры), но некоторые оптимизирующие компиляторы умеют заменять алоокации в куче на использование стека.
источник

SS

Sergey Sverdlov in Compiler Development
Nikolay
а какую книгу стоит почитать вот именно по этой задаче - чтобы понять как компилятор выделяет память на этапе компиляции?
Если я правильно понял, Вас интересуют самые базовые моменты, без продвинутых оптимизаций. Если так, то возьмите книжку "Постоение компиляторов"  Н. Вирта. Ссылка есть в здешнем списке литературы
источник
2020 February 09

E

EgorBo in Compiler Development
@maxgraey pow(NaN, 2) должно вернуть тоже самое что NaN * NaN ?
источник

M

MaxGraey in Compiler Development
EgorBo
@maxgraey pow(NaN, 2) должно вернуть тоже самое что NaN * NaN ?
Ну да
источник

E

EgorBo in Compiler Development
странно но у меня этот тест падает на некоторых тест машинах
источник

E

EgorBo in Compiler Development
видимо там в обоих случаях НаН но "разный"
источник

M

MaxGraey in Compiler Development
А что там ожидается? Сигнальный NaN что ли?
источник