Здравствуйте, FDSC, Вы писали:
FDS>·>Нет. Ты вопрос не понял. На каком основании компилятор будет решать, что "calculateHash" не должна писать в файл (и если кто-то случайно или намеренно там в файл пишет, то выдать ошибку компиляции), а "writeHash" может писать в файл?
FDS>Программист явно укажет функции, которые могут писать в файл.
А calculateHash берёт ссылку на функцию, скажем, для преобразования charset. Каким образом ты объяснишь, что этот преобразователь не должен использовать файловый API? А если вдруг таблицу charset придётся таки в некоторых случаях читать из файла?
FDS>·>А если не все, а только 95% функций? А если 5%? Где границу-то ставить?
FDS>Допустим у нас проект на 20 000 строк кода. 1000 тысяча строк кода может делать всё что угодно. Согласись, есть разница, сколько проверять?
Разница слабо коррелирует с кол-вом строк в общем случае.
FDS>·>Это гарантированно быстрее, чем делать много раз при удалении каждого объекта в программе.
FDS>Гарантированно быстрее вообще не делать.
FDS>Обнуление памяти при завершении процесса — это слишком рискованная операция. Обнулять всё должно очень и очень быстро.
Так это зависит от программы. Если прога держит большое кол-во в памяти в виде развесистой структуры, то может получиться гораздо быстрее занулить всё подряд, чем аккуратно вызывать деструкторы-занулители в правильном порядке.
FDS>>>Вдруг процесс, всё же, упадёт?
FDS>·>Ты уж определись...
FDS>Одно дело при краше не очистится память и мы не могли очистить, а другое дело, когда при краше можно очистить память, а мы всё равно не очистили.
С т.з. секьюрити невелика разница. Хакеры могут например специально убивать прогу в точно выбранные моменты времени.
FDS>·>Судя по спеке эта функция ничего не обещает по поводу того, что она не будет ничего никуда копировать.
FDS>Что-то такое
FDS>pwdAddress = VirtualAlloc(0, len, 0x1000 | 0x2000 | 0x00400000, 0x04);
И что эти цифири значат? Ты цитаты из док давай.