|
2 / 0 / 2
Регистрация: 14.10.2018
Сообщений: 55
|
||||||
Как узнать, сколько байтов памяти занимает массив13.04.2019, 20:07. Показов 12767. Ответов 36
Я за Си сижу уже.. полчаса..
встала задача: узнать количество памяти, который занимает массив, память к которому я выделяю динамически через calloc() пробовал sizeof(), но он выводит только "4".. на данный момент код выглядит так
0
|
||||||
| 13.04.2019, 20:07 | |
|
Ответы с готовыми решениями:
36
Как узнать сколько байтов в памяти занимает объект? Как узнать сколько программа занимает памяти ? Как узнать, в процесе отладки, сколько памяти занимает программа? |
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||||
| 14.04.2019, 19:12 | |||||
|
Еще раз. Я не говорю что это существенная проблема. Это особенность языка, обусловленная историей и эффективностью, которую просто надо учитывать. Тем более что в этом коде вообще нет динамического выделения памяти, о котором мы тут говорим.
0
|
|||||
| 14.04.2019, 19:16 | |
|
Не по теме: Отпишусь-ка я отсюда. Некогда срач разводить.
0
|
|
|
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
|
||||||||||||
| 14.04.2019, 23:13 | ||||||||||||
![]()
0
|
||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||||||||
| 15.04.2019, 00:11 | |||||||||
|
Если исправить эти ошибки, получается следующее:
0
|
|||||||||
|
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
|
|||||
| 15.04.2019, 00:55 | |||||
0
|
|||||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||
| 15.04.2019, 06:44 | ||
char * и int * могут иметь разный размер. Кстати, формально, в байте CHAR_BIT бит.
1
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||
| 15.04.2019, 09:45 | ||||||
man _msize тоже не может найти. Да и вообще, переменные и функции, начинающиеся с подчеркивания обычно считаются внутрибиблиотечными и не предназначены для конечного пользователя.Судя по поиску, это очередное майкрософтовское расширение, никак не связанное со стандартом. Нет уж, нестандартные расширения это нестандартные расширения и полагаться на них нельзя.
0
|
||||||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||
| 15.04.2019, 10:04 | ||
|
COKPOWEHEU, стандарт со мной согласен.
1
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 15.04.2019, 13:02 | ||
|
Ваша же ссылка скорее об адресации по указателю. Скажем, char *pchar; double *pdouble; имеют разный размер указуемого объекта (representation), что немного меняет арифметику. И разные требования по выравниванию. Но сам указатель остается целым числом одного и того же размера, иначе было бы нельзя было привести одно к другому.Добавлено через 55 секунд Впрочем, интереса ради, можете привести пример, когда у указателей на разные типы отличается размер. Хотя бы гипотетически
0
|
||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
|||
| 15.04.2019, 14:07 | |||
|
COKPOWEHEU, вы не правы.
Размер указателя на один тип может отличаться от размера указателя на другой тип, хотя бы потому, что области адресное пространство, в котором могут находится указанные сущности могут быть разного размера. Например, указатели на функции могут иметь размер отличный от указателя на данные из-за разницы в размерах секции кода и секции данных. В той же Гарвардской архитектуре данные и инструкции хранятся отдельно, следовательно, если шина инструкций «больше», чем шина данных, вы получите разный размер указателя на данные и указателя на функции. Также не стоит забывать, что указатели на платформах с сегментной адресацией имеют деление на «ближние» и «дальние». Вас вводит в заблуждение возможность приведения любого указателя на данные (object type) к void * и наоборот. И не вас одного:
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 15.04.2019, 15:03 | ||
|
0
|
||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||||
| 15.04.2019, 15:44 | ||||
|
COKPOWEHEU, боже мой, вы шутите?
0
|
||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|
| 15.04.2019, 17:05 | |
|
Поискал примеры реальных архитектур, где это могло бы встречаться. Не нашел, но упоминания, совпадающие с вашим мнением, проскакивали.
Можете привести пример реальной архитектуры, где размер указателя для разных типов данных отличается?
0
|
|
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
|
||||||||||||||||
| 15.04.2019, 17:25 | ||||||||||||||||
|
В linux есть malloc_usable_size возвращающее количество памяти, реально выделенное malloc & co. Может быть таким же, как запрошенное, или больше.
0
|
||||||||||||||||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||||
| 15.04.2019, 18:40 | ||||
|
Также привожу цитату из другого ответа на enSO:
0
|
||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|
| 15.04.2019, 18:59 | |
|
В таком случае согласен, был не прав.
Не по теме:
1
|
|
| 29.05.2020, 01:44 | ||||||||||||||||
|
Для того чтобы найти размер массива в байтах нужно записать формулу. (У меня 12ая студия стандарт языка с++ 10ый или 11ый шаблоны с неограниченным количеством аргументов у меня не работают).
Результат размера ww через long long 1 40 qr -1 -33686019 qr -2 410 qr -3 1 qr -4 40 размер 2умерного массива в байтах qr -5 0 qr -6 0 qr -7 3334992 qr -8 3334824 qr -9 469818092 qr -10 1903529889 qr -11 0 qr -12 0 qr -13 -22303829 qr -14 -1414812757 qr -15 -1409417731 qr -16 1 Я не знаю почему можно любым указателем на любой позиции его находить но реализация может быть разной на разных языках программирования и стандартах с Результат размера ww[0] через char 80 внутри двумерного массива Результат размера ww[0] через short 80 Результат размера ww[0] через int 80 Результат размера ww[0] через Dt 80 С простым Результат размера ee через char 200 Результат размера ee через short 200 Результат размера ee через int 200 Результат размера ee через Dt 200 Результат размера rr через char 5000 Результат размера rr через short 5000 Результат размера rr через int 5000 Результат размера rr через Dt 5000 Результат размера tt через char 240000 Результат размера tt через short 240000 Результат размера tt через int 240000 Результат размера tt через Dt 240000 Результат размера yy через Dt 240000 Отсюда следует вывод можно привести указатель к типу Чар и искать ближайшую позицию. Если объявить в mql4 массив типа
w[0] 582 w[-1] 0 w[-2] 0 w[-3] 147 w[-4] 0 w[-5] 0 w[-6] 200275480 w[-7] 0 w[-8] 0 w[-9] 0 w[-10] 0 w[-11] 30(количество элементов) w[-12] 8(тип double ) w[-13] 88 w[-14] 66 w[-15] 183666640 w[-16] 173180496 Единственное что понятно это то что длина поиска не превышала -16. Возможные контрольные значения -32 -64, мне кажется не будет так далеко разве что 128 битных системах но я не знаю бывают ли такие. Добавлено через 1 час 8 минут Массив статических массивов не хранится нигде, нужно заранее знать размер указателя, статические массивы намного дешевле обходятся чем динамические. Добавлено через 1 час 20 минут В общем понятно. Если создать указатели отдельно и приводить один указатель к другому то будет позиция -4 если потому что размер динамического указателя 4 байта, если использовать собственный указатель то результат такой.
0
|
||||||||||||||||
| 29.05.2020, 01:44 | |
|
Как узнать сколько памяти занимает таблица и каждый столбец в таблице Как узнать, сколько памяти занимает тот или иной элемент программы?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|