Qual foi o motivo por trás de não armazenar explicitamente o comprimento de uma matriz com uma matriz em C
?
Do meu ponto de vista, há razões esmagadoras para fazê-lo, mas não muitas em apoio ao padrão (C89). Por exemplo:
- Ter o comprimento disponível em um buffer pode impedir a saturação do buffer.
- Um estilo Java
arr.length
é claro e evita que o programador precise manter muitosint
s na pilha se estiver lidando com várias matrizes - Os parâmetros de função se tornam mais convincentes.
Mas talvez a razão mais motivadora, na minha opinião, seja que, geralmente, nenhum espaço é economizado sem manter o comprimento. Atrevo-me a dizer que a maioria dos usos de matrizes envolve alocação dinâmica. É verdade que pode haver alguns casos em que as pessoas usam uma matriz alocada na pilha, mas essa é apenas uma chamada de função * - a pilha pode lidar com 4 ou 8 bytes extras.
Como o gerenciador de heap precisa rastrear o tamanho do bloco livre usado pela matriz alocada dinamicamente de qualquer maneira, por que não tornar essas informações utilizáveis (e adicionar a regra adicional, verificada no tempo de compilação, que não é possível manipular o comprimento explicitamente, a menos que seja necessário? gosta de dar um tiro no próprio pé).
A única coisa que posso pensar no outro lado é que nenhum seguimento comprimento pode ter feito compiladores mais simples, mas não que muito mais simples.
* Tecnicamente, pode-se escrever algum tipo de função recursiva com uma matriz com armazenamento automático e, nesse caso (muito elaborado), armazenar o comprimento pode realmente resultar em um uso de espaço efetivamente maior.
malloc()
área ed não pode ser solicitado de maneira portátil?" Isso é algo que me faz pensar várias vezes.