История изменений
Исправление posixbit, (текущая версия) :
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
И да:
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. *ptp = (struct Page_Table_Page){{{0}}};
может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.
Исправление posixbit, :
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. *ptp = (struct Page_Table_Page){{{0}}};
может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.
Исходная версия posixbit, :
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. ]*ptp = (struct Page_Table_Page){{{0}}};
может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.