Win32 API не выделяет буферы заранее, потому что он хочет дать вызывающему коду выбор способа предоставления буфера.Это позволяет им предоставлять стек и различные буферы на основе кучи.Есть несколько мест, где максимальный размер буфера известен заранее, и разработчики хотят простоту использования стекового буфера.
Файловая система - лучший пример, поскольку пути не будут превышать MAX_PATH
.Так что вместо того, чтобы выделять + бесплатно.Разработчик просто объявляет основанный на стеке буфер.
Преимущество наличия C API выделяет память в том, что это упрощает шаблон вызова.Недостатком шаблона Win32 является то, что в большинстве случаев вы вызываете API дважды.Первый раз, чтобы определить размер буфера, затем второй раз с буфером соответствующего размера.При использовании буфера, выделенного API, требуется только один вызов.
Недостатком является то, что вы отказываетесь от выбора распределения у вызывающей стороны.Кроме того, вы должны сообщить свой выбор, чтобы они должным образом освободили API (например, окна могут выделяться из нескольких разных мест).