Вопрос также может задаваться:
В Windows нет функции ZeroMemory . В заголовочных файлах (winbase.h
) это макрос, который в мире C поворачивается и вызывает memset:
memset(Destination, 0, Length);
ZeroMemory - это не зависящий от языка термин для «функция вашей платформы, которую можно использовать для обнуления памяти»
Delphi эквивалент memset
равен FillChar
.
Поскольку в Delphi нет макросов (и до дней вставки), вызов ZeroMemory означал, что вы должны были подвергнуться штрафу за дополнительный вызов функции, прежде чем вы действительно получили FillChar * 1032. *.
Так что во многих отношениях вызов FillChar является микрооптимизацией производительности, которой больше не существует, если в нее встроено ZeroMemory :
procedure ZeroMemory(Destination: Pointer; Length: NativeUInt); inline;
Бонус Чтение
Windows также содержит функцию SecureZeroMemory . Он делает то же самое, что и ZeroMemory . Если он делает то же самое, что и ZeroMemory , почему он существует?
Поскольку некоторые умные компиляторы C / C ++ могут распознать, что установка памяти на 0
перед тем, как избавиться от памяти, - пустая трата времени - и оптимизировать вызов на ZeroMemory .
Я не думаю, что компилятор Delphi такой же умный, как многие другие компиляторы; поэтому нет необходимости в SecureFillChar .