|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.09.2015, 14:46 | #1 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
delete []p
Код:
Отсюда я делаю вывод, что она хранится где то в среде выполнения, ведь нужно знать сколько элементов удалить. По чему, тогда нельзя вычислить длину массива? delete как то ее узнает |
21.09.2015, 14:58 | #2 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
всё оно завязано на менеджере памяти, реализация которого зависит от компилятора, настроек, даже ОС, поэтому нет штатного способа получить размер выделенной памяти, а различные хаки будут работать только при определённых условиях
а знать точное количество занимаемой памяти совсем не обязательно....... например, менеджер памяти вполне может для больших объектов выделять отдельный блок памяти и потом его же удалять т. е. программе нужно 136 байт, а ей сразу 512 дали и пометили всю область как занятую (не особо эффективный алгоритм, но и такое может быть) если почитать о менеджерах памяти, то там очень часто закладывают различные сценарии работы т. е., например, для мелких объектов используют одну схему распределения, для средних - другую, для больших могут применить описанный выше подход, чтоб не париться) Последний раз редактировалось GreenWizard; 21.09.2015 в 15:11. |
21.09.2015, 15:04 | #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
ЛС отключены Аларом. |
21.09.2015, 15:31 | #4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
Одна и та же запись может означать как один элемент по указателю, так и набор элементов. Причем этот набор не обязательно будет от начала выделенной памяти и до конца. В общем, пишите себе как принято с передачей в функции указателя на элемент и максимального кол-ва элементов, иначе в один прекрасный день передадут указатель на третий элемент и функция поломается. Если делать нормальный массив в языке, то там добавятся и функции и проверка на выход за границы и прочие радости, которые просадят производительность, что не будет соответствовать фишке плюсов. |
|
21.09.2015, 15:44 | #5 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Спасибо в общих чертах понятно.
Значит эффективность выделения динамической памяти, да же от компилятора зависит? я думал что только от ОС. |
21.09.2015, 15:45 | #6 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Просто то, что у ТС, это не массив, а огрызок памяти. |
|
21.09.2015, 15:49 | #7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
На уровне языка нет массивов, равно как нет и строк. Библиотечные всякие array, vector,... есть, но у них и нет проблемы с числом элементов.
|
21.09.2015, 15:57 | #8 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Цитата:
Код:
|
||
21.09.2015, 16:00 | #9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Как по мне, так это костыль, а не массив. На этапе компиляции там чего-то навертели, но не полноценный нормальный массив всё равно.
|
21.09.2015, 16:05 | #10 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Ну так вся его прелесть именно в compile-time std::array, тоже может быть реализован через него, но имеет уже функции-обертки.
Что касается 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 |