Size: a a a

2020 May 13

VF

Vlad Faust in pro.cxx
Привет.

Дизайню язык, появился нетривиальный вопрос. Анонимные функции — их адреса ведь можно хранить не в рантайме? Мол, иметь некую инструкцию компилятора addressof, которая раскрывалась бы в числовой литерал, но сам рантайм объект анонимной функции не хранил бы этот адрес.

В принципе, концепция имеет право на существование, но я не уверен, что настоящий адрес функции можно зарезолвить во время компиляции. Ведь есть PIC, например. Что думаете? Что почитать?

P.S:

#include "stdio.h"

int main() {
 int (*sum)(int, int);
 printf("%ul\n", sizeof(sum));
}

// => 8
источник

z

zeroid in pro.cxx
Vlad Faust
Привет.

Дизайню язык, появился нетривиальный вопрос. Анонимные функции — их адреса ведь можно хранить не в рантайме? Мол, иметь некую инструкцию компилятора addressof, которая раскрывалась бы в числовой литерал, но сам рантайм объект анонимной функции не хранил бы этот адрес.

В принципе, концепция имеет право на существование, но я не уверен, что настоящий адрес функции можно зарезолвить во время компиляции. Ведь есть PIC, например. Что думаете? Что почитать?

P.S:

#include "stdio.h"

int main() {
 int (*sum)(int, int);
 printf("%ul\n", sizeof(sum));
}

// => 8
Имеется ввиду относительный адрес функции? Но даже его нельзя получить, насколько я помню
источник

z

zeroid in pro.cxx
Его можно вычислить на стадии линковки, т.е после сборки, а это уже слишком поздно
источник

VF

Vlad Faust in pro.cxx
А что тогда хранится в sum в примере выше?
источник

VF

Vlad Faust in pro.cxx
А, я понял, что чушь несу
источник

VF

Vlad Faust in pro.cxx
Сейчас сооружу пример на плюсах и лямбдах
источник

z

zeroid in pro.cxx
Мусор там, это неинициализированный указатель
источник

v

vehlwn in pro.cxx
Vlad Faust
Привет.

Дизайню язык, появился нетривиальный вопрос. Анонимные функции — их адреса ведь можно хранить не в рантайме? Мол, иметь некую инструкцию компилятора addressof, которая раскрывалась бы в числовой литерал, но сам рантайм объект анонимной функции не хранил бы этот адрес.

В принципе, концепция имеет право на существование, но я не уверен, что настоящий адрес функции можно зарезолвить во время компиляции. Ведь есть PIC, например. Что думаете? Что почитать?

P.S:

#include "stdio.h"

int main() {
 int (*sum)(int, int);
 printf("%ul\n", sizeof(sum));
}

// => 8
Какие адреса? У првалуева нет адреса.
источник

VF

Vlad Faust in pro.cxx
Указатель на функцию лямбды в плюсах можно получить, но это очень нетривиально...
источник

VF

Vlad Faust in pro.cxx
У меня пока не получилось накатать рабочий код, который бы вытаскивал этот самый адрес
источник

VF

Vlad Faust in pro.cxx
Но главное то, что в C++ рантайм-объект лямбды хранит только closure. Значит, обращается по символу
источник

v

vehlwn in pro.cxx
Vlad Faust
Указатель на функцию лямбды в плюсах можно получить, но это очень нетривиально...
Это называется конвертация лямбды в указатель на функцию, а не адрес анонимного функтора.
источник

VF

Vlad Faust in pro.cxx
Спасибо. Думаю, у меня XY problem. Пойду дальше думать
источник
2020 May 14

AK

Anton Kviatkovskii in pro.cxx
В supapro
источник

O

Ofee in pro.cxx
Александр Караев
ну закон дырявых абстракций никто не отменял, подкапотный треш тоже нужно знать и понимать.

мой коммент был скорее к тому, что я ещё не видел ни одной статьи, после которой действительно приходит ясность и не становится страшно (может не попадалось или я просто пугливый)
Мне понравилась вот эта серия статей, буквально первая ссылка в гугле, даёт неплохой старт для понимания, что такое корутины и какую магию генерирует компилятор, а не как их использовать. Так что понятнее мне, вроде, стало. А страшно ещё не успело стать.

Хотя я и не ручаюсь, что она достаточно полная, у меня некоторые минимальные концептуальные пробелы ещё остались, но вероятнее, исправится перепрочтением этого же/другого источника
источник

m

magras in pro.cxx
Vyacheslav Olkhovchenkov
что-то я сейчас читаю cppreference и у меня складывается впечетление что нельзя дергать хиповый аллокатор если переменная автоматическая.
Аллокатор вызывается один раз при создании корутины и место выделяется сразу под все автоматические переменные и служебную информацию. Стандарт разрешает не дергать аллокатор, если компилятор может доказать, что коротину можно положить на стэк.
источник

SE

Stanislav Ershov in pro.cxx
Ofee
Мне понравилась вот эта серия статей, буквально первая ссылка в гугле, даёт неплохой старт для понимания, что такое корутины и какую магию генерирует компилятор, а не как их использовать. Так что понятнее мне, вроде, стало. А страшно ещё не успело стать.

Хотя я и не ручаюсь, что она достаточно полная, у меня некоторые минимальные концептуальные пробелы ещё остались, но вероятнее, исправится перепрочтением этого же/другого источника
у Andrey были пару докладов на C++ spb meetup про внутренности корутин
источник

R

Rasha in pro.cxx
привет всем. Кто может посоветовать книгу по указателям и работой с памятью на Си https://www.amazon.com/Understanding-Using-Pointers-Techniques-Management/dp/1449344186
источник

R

Rasha in pro.cxx
нашел вот такую
источник

OS

Oleksandr Senkovych in pro.cxx
А чо там, целая книга нужна?
источник