Ответ 1
Это довольно подробная техническая реализация. Для начала вам сначала нужно понять структуру файла PE32, формат файла для DLL и EXE в Windows. Каноническая статья для этого - Мэтт Пьетрик "Peering Inside the PE," Обзор файла исполняемого файла Win32 Portable ". Написано 17 лет назад, но все еще актуально и доступно.
Параметр/filealign ссылается на значение поля IMAGE_OPTIONAL_HEADER.FileAlignment. Он определяет, как исходные данные в секции выравниваются. Раздел представляет собой фрагмент кода или данных в файле. Почти исключительно данные в случае чистых .NET-сборок.
Между файловым форматом и диском существует очень тесная взаимосвязь. Исполняемое изображение используется в качестве файла резервной копии файла Mapped Memory в Windows. Исполняемые файлы загружаются путем сопоставления файла в адресное пространство виртуальной памяти. Очень эффективная загрузка DLL связана только с созданием этого сопоставления, никакие фактические данные не считываются из файла. Это происходит ленивым способом, когда процесс пытается прочитать байт из раздела. Если он еще не загружен в память, это вызывает ошибку страницы, и операционная система считывает 4096 байт из файла в память. Большим преимуществом является то, что вы не платите за данные или код, который вы не используете. Также причина, по которой чтение [атрибутов] является дорогостоящим, когда вы читаете его в первый раз.
Актуальность выравнивания файлов заключается в том, как выводятся исходные данные в разделах. Большинство современных исполняемых файлов, содержащих машинный код, используют выравнивание 4096 байт, размер страницы виртуальной памяти. Это не очень важно для сборок, содержащих управляемый код, IL - это просто данные. Который имел бы смысл использовать меньшее выравнивание, которое тратило меньше места. 512 байтов (не килобайт) - это счастливое число, это наименьшее значение, допустимое в формате PE32.
Единственная возможная причина, по которой я могу думать о добавлении опции в пользовательский интерфейс, заключается в том, что у компилятора С# очень мало параметров компиляции по сравнению с другими компиляторами. "Другое" - это компиляторы, которые генерируют собственный код. Таким образом, опция есть, потому что у компилятора есть опция. Многие трюки покрываются [атрибутами], что делает командную строку компилятора коротким и быстрым. Но нет атрибута для выравнивания файлов, он должен быть известен до генерации файла, атрибут будет слишком поздним.
Простым примером является компилятор и компоновщик С++, IDE предлагает девятнадцать страниц свойств для их установки. Но все еще не покрывая их всех, действительно непонятные должны быть установлены на странице "Командная строка".