LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

и даже без линка - вот она прописывает по указателю, что вернулся из do_cast

 call   50 <tst+0x10>
    R_X86_64_PLT32 do_cast-0x4
 mov    BYTE PTR [rax],0x1

Единственное чего добьёшся этим do_cast() - это заставишь компилятор гарантированно хранить где-то в памяти fl, что-бы утекший в do_cast() указатель был валидным.

быть не могет. просто у тебя тест кривой. очевидно что переменную прописали, и это плохо кончится. например ее подставят в вызов снова внешней функции не по значению, а по указателю. и там она будет уже true.

это просто эффект локальных оптимизаций у тебя слегка выправляет ситуацию. но это лишь частный случай.

Исходная версия alysnix, :

?и даже без линка - вот она прописывает по указателю, что вернулся из do_cast

 call   50 <tst+0x10>
    R_X86_64_PLT32 do_cast-0x4
 mov    BYTE PTR [rax],0x1

Единственное чего добьёшся этим do_cast() - это заставишь компилятор гарантированно хранить где-то в памяти fl, что-бы утекший в do_cast() указатель был валидным.

быть не могет. просто у тебя тест кривой. очевидно что переменную прописали, и это плохо кончится. например ее подставят в вызов снова внешней функции не по значению, а по указателю. и там она будет уже true.

это просто эффект локальных оптимизаций у тебя слегка выправляет ситуацию. но это лишь частный случай.