Що було міркуванням про те, щоб явно не зберігати довжину масиву з масивом у C?
Як я це бачу, є надзвичайно багато причин для цього, але не дуже багато в підтримку стандарту (C89). Наприклад:
- Доступна довжина в буфері може запобігти перевищенню буфера.
- Стиль Java
arr.lengthодночасно зрозумілий і не дозволяє програмісту підтримувати багатоints на стеку, якщо він має справу з декількома масивами. - Параметри функції стають більш зухвалими.
Але, мабуть, найбільш мотивуюча причина, на мою думку, полягає в тому, що зазвичай жоден простір не економиться без збереження довжини. Я б ризикну сказати, що більшість застосувань масивів передбачає динамічне розподіл. Щоправда, можуть бути випадки, коли люди використовують масив, виділений у стеку, але це лише один виклик функції * - стек може обробляти додатково 4 або 8 байтів.
Оскільки менеджер купи повинен відстежувати розмір вільного блоку, який використовується динамічно виділеним масивом, то чому б не зробити цю інформацію корисною (і додати додаткове правило, перевірене під час компіляції, воно не може чітко маніпулювати довжиною, якщо тільки люблять стріляти собі в ногу).
Єдине , що я можу думати на іншій стороні, що ні трекінгу довжина не може бути зроблено компілятори простіше, але не , що набагато простіше.
* Технічно можна було записати якусь рекурсивну функцію з масиву з автоматичним зберіганням, і в цьому (дуже досконалому) випадку зберігання довжини дійсно може призвести до більшого використання місця.
malloc()можна запитувати розмір області редакції портативно?" Це річ, яка мене змушує задуматися кілька разів.