46 / 46 / 5
Регистрация: 28.07.2009
Сообщений: 144
|
||||||
1 | ||||||
Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?22.12.2009, 16:23. Показов 14340. Ответов 41
Метки нет (Все метки)
Скажем я в какой-то момент выделяю память под массив:
Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
0
|
22.12.2009, 16:23 | |
Ответы с готовыми решениями:
41
Удаление памяти, на которую ссылается указатель Как узнать размер массива в динамической памяти? Размер выделенной динамической памяти больше чем ожидается Как добавить новой динамической памяти к уже выделенной |
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
22.02.2014, 22:43 | 22 |
Может быть мы по-разному понимаем слово "средства". Но я бы никогда не назвал UB - средством, разве что средством нажить себе проблемы. Под средством я подразумевал нормально работающее в пределах заданной платформы решение. Примером такого решения является упомянутый уже _msize. Для new аналогичных решений - нет.
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
22.02.2014, 22:58 | 23 | |||||
есть но так скажем полумеры
sizeof прекрасно возвращает размер структуры стоит обернуть массив в структуру и можем получить размер, но размер фиксированный во время работы менять нельзя, посему и полумеры ну это так разговор ушел в сторону, кто еще как может посему прекращаю дозволенные речи а вообще самое лучшее таскать размер с собой, 4 байта не великая нагрузка, зато избавит от кучи головняков Добавлено через 2 минуты а пример забыл привести
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
22.02.2014, 23:20 | 24 |
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
23.02.2014, 00:11 | 25 |
Не спорю есть
но оно отключается настройками компилятора Пускай об этом голова болит у тех кто хочет чесать левой рукой правое ухо весь мир пользуется перетаскиванием размера, весь ДииректИкс на этом построен, а здесь виш ли
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
23.02.2014, 00:24 | 26 |
Я разрабатывал программы под платформы, где отключение выравнивания переводило железку в бесконечный ребут. Потому что обращение по не выровненным адресам вызывало аппаратное исключение.
Я понимаю, что ты щас скажешь, что это маленький процент. Но я уже не могу игнорировать этот факт, т.к. лично с ним сталкивался.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
23.02.2014, 00:36 | 28 |
Да не скажу
Я полностью на твоей стороне а примеры приводил, чтобы показать что пути есть и какие там есть "подводные камни" чтобы не вылез какой нибудь ученик с "А я знаю как" Добавлено через 2 минуты пользуй кто тебе мешает только потом не говори что не предупреждали, когда будешь компилить на другом компиляторе ибо
1
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
23.02.2014, 00:38 | 29 |
Да юзай на здоровье. Только имей в виду, что при смене компилятора, версии рантайма, операционной системы _msize примененный для памяти выделенной через new может сломаться. А может и не сломаться.
Если ты пишешь для себя - это пофигу. Если работаешь в команде, а проект потом начнут портировать на другую платформу, или юзер вашей программы обновит себе ОС или рантайм, то могут начаться непредсказуемые проблемы.
0
|
Неэпический
|
|
23.02.2014, 00:54 | 30 |
а MSDN говорит что в <malloc.h>
http://msdn.microsoft.com/ru-r... 077bc.aspx и это сугубо про студию
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
23.02.2014, 00:57 | 31 |
0
|
Неэпический
|
|
23.02.2014, 01:13 | 32 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
23.02.2014, 01:19 | 33 |
0
|
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
|
|
25.02.2014, 16:45 | 34 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
25.02.2014, 16:55 | 35 |
Такие резкие утверждения принято подкреплять доказательствами. Я вот свое могу:
0
|
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
|
|
26.02.2014, 01:42 | 36 |
И как по вашему работает оператор "new" если не секрет??? и что значит если оператор "new" выделит память не через "malloc" а через что???
Добавлено через 15 минут new/delete это тот же malloc/free только new помимо выделения памяти еще инициализирует обект, а delete вызывает дуструктор!
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
26.02.2014, 02:17 | 37 |
Во-первых оператор new можно перегружать. Про кастомные аллокаторы ведь в курсе? А то ведь там за new и пул памяти может скрываться.
Во-вторых ни стандартом, ни какой-то конкретной реализацией не гарантируется, что new будет обязательно реализован через malloc. Не гарантируется даже в пределах одной реализации, достаточно сменить release сборку на debug и компилятор будет генерировать совсем другие вызовы, с другой сервисной информацией о выделенной памяти. Нормальный разработчик должен это учитывать при принятии решений.
0
|
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
|
|
26.02.2014, 02:53 | 38 |
если не умеешь ездить на машине это не значит что она не работает!
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
26.02.2014, 09:58 | 39 |
FinancialShark, в любом случае отслеживание кол-ва выделенной памяти нет в стандарте, все остальное непереносимые кривые костыли, пользоваться или нет решает разработчик, а раз новичек спрашивает - нечего его сбивать с пути - пусть руководствуется стандартом, иначе потом вырастают рукожопы
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
26.02.2014, 13:01 | 40 |
Добавлено через 12 секунд
Давай я тебе расшифрую. Нормальный разработчик при принятии решений должен учитывать побочные эффекты. От этого в конце концов зависит его зарплата. Это означает, что если я водитель, то я могу ездить без фар или ремня безопасности, если хочу, но это не означает, что это безопасно. Т.е. я, водитель, оценил ситуацию и принял решение, ага - щас можно! Однако в автошколе учат чему? Правильно, общему случаю, и ГИБДД штрафует по чему? Правильно, по тому же общему случаю. Потому что не всякая частная ситуация применима в общем случае. И на 1 безопасный проезд без фар может оказаться 3 с аварией (а может и нет, но профи должен рассмотреть все варианты).
0
|
26.02.2014, 13:01 | |
26.02.2014, 13:01 | |
Помогаю со студенческими работами здесь
40
Откуда берется значение указателя после удаления памяти на которую он ссылается? Как уменьшить размер выделенной памяти Как обнулить указатель на одну ячейку в динамически-выделенной памяти? Получить адрес памяти, на который ссылается указатель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |