Войти
ФлеймФорумПрограммирование

Расстановка точек над Ӥнициализацией CRT (2 стр)

Страницы: 1 2
#15
17:11, 9 июля 2015

cNoNim
> в общем то можно наверное забить, на все секции кроме XCU если они не нужны
> рантайму
если мсдн советует инициализировать все начиная от xca до xcz то это лучше делать. а xcu или нет уже как бы не важно.

#16
17:17, 9 июля 2015

Pushkoff
ну мсдн говорит, что xca и xcz используются только потому что xcu между ними
по факту можно использовать
xctz
и
xcua
для вычисления границ и не париться )
конечно нет разницы особой между xca и xcz, но хотелось понять может я в чем то ошибаюсь

#17
17:37, 9 июля 2015

cNoNim
адрес секции ты получаешь размещая в ней переменную и получая ее адрес.
поэтому xcua скорее всего не прокатит, потому как она будет идти после xcu

#18
17:38, 9 июля 2015

Pushkoff
> поэтому xcua скорее всего не прокатит, потому как она будет идти после xcu
так она и должна идти после в xcua я помещаю конец
в xctz начало

#19
17:40, 9 июля 2015

cNoNim
ну собственно ты делаешь то же самое что рекомендует msdn но сокращаешь диапазон. а есть ли в этом смысл?

#20
17:53, 9 июля 2015

Pushkoff
> а есть ли в этом смысл?
разумеется нет, просто хотелось понять может ли компилятор в какую нить секцию еще что нить сунуть

#21
17:58, 9 июля 2015

cNoNim
> разумеется нет, просто хотелось понять может ли компилятор в какую нить секцию
> еще что нить сунуть

Теоретически завтра может выйти какой нибудь MSVC++17 и там будет всё по другому.
Рантайм они могут корёжить как угодно для своего удобства - туда обычному человеку лезть по идее не надо.
Если полез не стоит рассчитывать, что будет работать на новой версии студии.

#22
18:13, 9 июля 2015

Лан поехали дальше, я на сколько понимаю
в месте инициализации глобальной переменной встраивается некоторая функция указатель на которую потом и помещается в список инициализаторов
по крайней мере в GCC это точно так, VC++ что то забыл проверить но наверное также
при этом в функции вызов деструктора передается в atexit
при этом atexit использует уже свой список ни как не связанный со списком деструкторов
и обработка этого списка осуществляется в некоторой функции которая вызывается после main и во время выхода через функции сишного рантайма типа
exit

но я чего то пропустил... получается если выйти тупо по ExitProcess то ни atexit ни деструкторы не вызовутся, или я чего то не понимаю?

#23
18:14, 9 июля 2015

в частности вот здесь дается подтверждение моему предположению и оно в принципе логично
http://stackoverflow.com/questions/915312/different-ways-of-exiti… -process-in-c
но
меня смущает

It is theoretically possible that the runtime library has specially arranged for ExitProcess() to call global object destructors -- this could be done by always loading a specific DLL whose entry point function will perform these calls, since ExitProcess() will call the entry point function for each loaded DLL with DLL_PROCESS_DETACH -- however to my knowledge, no implementation does this.

потому что я тоже не вижу ни чего подобного

#24
18:45, 9 июля 2015

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

#25
18:49, 9 июля 2015

Правда с Dll непонятно. Я думал, что entry point с флагами единственный способ для длл создать и прибить свои объекты в случае независимого рантайма.

#26
19:17, 9 июля 2015

Поцоны, ну зачем вам это.

Страницы: 1 2
ФлеймФорумПрограммирование

Тема в архиве.