![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]() Код:
Отсюда я делаю вывод, что она хранится где то в среде выполнения, ведь нужно знать сколько элементов удалить. По чему, тогда нельзя вычислить длину массива? delete как то ее узнает |
![]() |
![]() |
![]() |
#2 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
всё оно завязано на менеджере памяти, реализация которого зависит от компилятора, настроек, даже ОС, поэтому нет штатного способа получить размер выделенной памяти, а различные хаки будут работать только при определённых условиях
а знать точное количество занимаемой памяти совсем не обязательно....... например, менеджер памяти вполне может для больших объектов выделять отдельный блок памяти и потом его же удалять т. е. программе нужно 136 байт, а ей сразу 512 дали и пометили всю область как занятую (не особо эффективный алгоритм, но и такое может быть) если почитать о менеджерах памяти, то там очень часто закладывают различные сценарии работы т. е., например, для мелких объектов используют одну схему распределения, для средних - другую, для больших могут применить описанный выше подход, чтоб не париться) Последний раз редактировалось GreenWizard; 21.09.2015 в 15:11. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
https://www.google.com/search?q=c%2B...+know+the+size
А вообще в C++ есть же и std::vector, и std::array, зачем самому создавать массив?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
Одна и та же запись может означать как один элемент по указателю, так и набор элементов. Причем этот набор не обязательно будет от начала выделенной памяти и до конца. В общем, пишите себе как принято с передачей в функции указателя на элемент и максимального кол-ва элементов, иначе в один прекрасный день передадут указатель на третий элемент и функция поломается. Если делать нормальный массив в языке, то там добавятся и функции и проверка на выход за границы и прочие радости, которые просадят производительность, что не будет соответствовать фишке плюсов. |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]()
Спасибо в общих чертах понятно.
Значит эффективность выделения динамической памяти, да же от компилятора зависит? я думал что только от ОС. |
![]() |
![]() |
![]() |
#6 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
Просто то, что у ТС, это не массив, а огрызок памяти. |
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
На уровне языка нет массивов, равно как нет и строк. Библиотечные всякие array, vector,... есть, но у них и нет проблемы с числом элементов.
|
![]() |
![]() |
![]() |
#8 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
Цитата:
Код:
|
||
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Как по мне, так это костыль, а не массив. На этапе компиляции там чего-то навертели, но не полноценный нормальный массив всё равно.
|
![]() |
![]() |
![]() |
#10 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]()
Ну так вся его прелесть именно в compile-time
![]() Что касается std::vector, то здесь уже более сложная реализация. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Python. В чем отличие Entry.delete(0, END) от Entry.delete(0.0, END) и еще вопрос | pompiduskus | PHP | 4 | 12.08.2014 23:17 |
delete [] | nazavrik | Общие вопросы C/C++ | 6 | 15.01.2010 22:46 |
error C2541: 'delete' : cannot delete objects that are not pointers | novokhatsky | Общие вопросы C/C++ | 2 | 14.12.2009 10:25 |
Перегрузка операций new, new[], delete, delete[] | IgorKr | Общие вопросы C/C++ | 1 | 22.10.2008 12:14 |