почему в C11 нет выровненного calloc

В стандарте C11 добавлена ​​функция aligned_alloc для выделения неинициализированной выровненной памяти. Стандарт также включает функцию calloc для выделения памяти, которая инициализируется нулем, но только выравнивает ее с размером самого большого типа.

Почему стандарт C11 не включает функцию aligned_calloc которая выделяет выровненную память с нулевой инициализацией?

Я знаю, что вы можете просто перенести результат, чтобы получить инициализированную память, но функция calloc очень полезна в некоторых операционных системах, поскольку память, предоставленная ядрами, часто должна быть инициализирована нулем (и выровнена по размеру страницы) по соображениям безопасности. calloc может использовать это и избегать двойной инициализации.

Кроме того, некоторые операционные системы (например, linux) обеспечивают память в режиме копирования на запись, что вместе с calloc позволяет создавать примитивные разреженные структуры данных. Инициализация memset в результате aligned_alloc уничтожает это свойство.

Мне кажется, что этих преимуществ, хотя и не портативных, должно быть достаточно, чтобы иметь вторую выровненную функцию распределения.

Лучшее предположение, которое я мог бы предложить, заключается в том, что aligned_calloc специально идет против одного из явных целей чартера C1X:

В отличие от C9X, консенсус на лондонском совещании заключался в том, что не должно быть никаких изобретений без исключения. Следует учитывать только те функции, которые имеют историю и широко используются коммерческой реализацией. Также необходимо проявлять осторожность, чтобы стандартизировать эти функции таким образом, чтобы сделать Стандарт и коммерческую реализацию совместимыми.

http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf

Оглядываясь на коммерческие реализации, aligned_malloc был широко доступен и распространен для большинства платформ. Выровненный calloc потребовал бы больше, чем обертывание на многих платформах, чтобы предлагать больше, чем пара aligned_malloc () + memset (), поэтому его можно было бы считать изобретательской и, таким образом, не учитывалось.

Это было бы моей лучшей догадкой.