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

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

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

28 ответов

17 просмотров

Гарантируется, но про 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 переменные, выведенные в порты, не дает выкинуть цикл

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
9
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта