170 похожих чатов

Гарантируется ли, что calloc занулит память? Столкнулся с тем, что вызов

memset был "оптимизирован" - зануления не произошло...

28 ответов

2 просмотра

Гарантируется, но про memset ты гонишь

memset можешь соптимизироваться, если после этого память не трогают

Dmitriy-[Отпуск] Автор вопроса
Anatoly Shirokov
Гарантируется, но про memset ты гонишь

Увы, не гоню Ассемблерный выхлоп сейчас гляну, но факт в том, что в участок, ожидающий занулённую память, она не пришла таковой

Есть версия мемсета с гарантированным занулением (внутри просто через volatile зануляет в цикле)

Dmitriy-[Отпуск] Автор вопроса
Anatoly Shirokov
Баг оптимизатора? MRE есть?

Не вышло посмотреть. Впервые вижу, как IDA падает с 0xC0000005 (access violation) при попытке открыть PDB...

Dmitriy-[Отпуск] Автор вопроса
Anatoly Shirokov
Гарантируется, но про memset ты гонишь

Таки гнал, правда... Обнаружилась ошибка, пролежавшая незамеченной месяца три точно - зануляться должен был блок из header_size + bytes_count байт, но учитывалось только последнее значение (а зануление шло с начала блока) Итог - alignof(Ty) байт в конце не занулялись

Dmitriy [Отпуск]
Таки гнал, правда... Обнаружилась ошибка, пролежав...

Мне кажется надо сразу было искать ошибку. Если memset не зануляет, то нахрен он нужен? Что он тогда делает? Ни одна самая дикая оптимизация не должна изменить самой сути работы функции. А если такое есть, то это не оптимизация. Это вредительство.

Dmitriy-[Отпуск] Автор вопроса
d7d1cd
Мне кажется надо сразу было искать ошибку. Если me...

Такая оптимизация есть... Неслучайно пароли никто не зануляет memset`ом)

d7d1cd
Мне кажется надо сразу было искать ошибку. Если me...

Если участок памяти больше нигде не используется — зачем тратить ресурсы на его зануление?

Dmitriy [Отпуск]
Такая оптимизация есть... Неслучайно пароли никто ...

Подробнее? Я пропустил, в смысле с мемсетом что то не так?

Dmitriy-[Отпуск] Автор вопроса
Roy Mustang
Подробнее? Я пропустил, в смысле с мемсетом что то...

Какие люди!) Например, тут описано: https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-rtlsecurezeromemory RtlZeroMemory - простой вызов memcpy И в гугле подобное найти можно...

d7d1cd
Мне кажется надо сразу было искать ошибку. Если me...

А то что компилятор может заменить беск. цикл на return false тебя не смущает? Или якобы конечный цикл (полагаемся на переполнение знакового) на бесконечный? Правило "что вижу то и делает" в С++ не работают.

Гарантируется. Где ты там ловил memset не понятно совсем. С чего ты взял что он должен вызываться?

Dmitriy [Отпуск]
Увы, не гоню Ассемблерный выхлоп сейчас гляну, но ...

Ассемблерный выхлоп никогда ничего не доказывает

А если объявить эту переменную как volatile?

Dmitry B.
А если объявить эту переменную как volatile?

Да даже если б это помогло - КАК ? Тут нет переменной, она динамическая

Dmitry B.
А если объявить эту переменную как volatile?

Напиши кусочек кода как это ты предполагаешь сделать

можно пруф

Kirill Bolshakov
А то что компилятор может заменить беск. цикл на r...

Про замену бесконечного на return false смущает. Ведь проги для микроконтроллеров так и пишут: там бесконечный цикл, в котором и прописана вся основная работа железки. Про замену конечного цикла с переполнением знакого не смущает. Переполнение знакового - это уб, поэтому ожидаемо непонятый результат.

Danya🔥
Если участок памяти больше нигде не используется —...

У @DymOK, как я понял, участок памяти использовался. Если функция написана правильно, без уб, (а memset, очевидно, написан без уб), то ее правильный вызов должен привести к тому, что в функции заложено. И никакая оптимизация не должна менять этого. И если ты видишь, что как будто оптимизация что-то поменяла в поведении, то надо искать ошибку в своем коде, а не в оптимизаторе или в стандартной функции. А иначе как писать программы то тогда?

d7d1cd
Про замену бесконечного на return false смущает. В...

На мк чтение/запись в volatile переменные, выведенные в порты, не дает выкинуть цикл

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а чем хуже?
Alexey Kulakov
10
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Карта сайта