¿Por qué la longitud máxima de la cadena C literal es diferente de max char []?

Aclaración: Dado que una cadena literal puede ser reescrita como unconst char[] (ver más abajo), imponiendo una longitud máxima más baja en literales que enchar[]s es solo un inconveniente sintáctico. ¿Por qué el estándar C fomenta esto?

El estándar C89 tiene un límite de traducción para los literales de cadena:

509 caracteres en un literal de cadena de caracteres o literal de cadena ancha (después de la concatenación)

No hay un límite para una matriz de caracteres; quizás

32767 bytes en un objeto (solo en un entorno alojado)

se aplica (no estoy seguro de qué significa objeto o entorno alojado), pero en todo caso es un límite mucho más alto.

Tengo entendido que una cadena literal es equivalente a una matriz de caracteres que contiene caracteres, es decir: siempre es posible reescribir algo como esto:

const char* str = "foo";

dentro de esto

static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;

Entonces, ¿por qué un límite tan duro en los literales?

Respuestas a la pregunta(3)

Su respuesta a la pregunta