Определение размера массива после динамического выделения в C
В C массивы, выделяемые динамически с помощью оператора new, по своей сути не раскрывают свой размер программно. Этот вопрос возникает из наблюдения, что delete[] должен знать размер выделенного массива для эффективного освобождения памяти.
Почему нет встроенной функции для получения размера массива?
В отличие от массивов, объявленных в стеке, размер которых можно определить с помощью метода sizeof(), размер динамически выделяемых массивов неизвестен во время компиляции. Это связано с тем, что выделенной памятью управляет менеджер памяти среды выполнения или операционной системы, а не компилятор. sizeof() работает как константа времени компиляции и не может динамически оценивать размеры динамически выделяемых массивов.
Альтернативные стратегии
Хотя C не предоставляет встроенную для получения размера массива, существуют альтернативные подходы:
int *arr = new int[256]; int *p = &arr[100]; int size = p - arr; // Subtracting pointers yields the size
Последствия
Отсутствие стандартизированного способа определения размера динамически выделяемых массивов в основах C из-за ориентации языка на гибкость управления памятью и независимость от платформы. Несмотря на то, что в определенных сценариях он накладывает ограничения, он также допускает разнообразные стратегии реализации и возможности оптимизации.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3