|
2 / 0 / 2
Регистрация: 14.10.2018
Сообщений: 55
|
||||||
Как узнать, сколько байтов памяти занимает массив13.04.2019, 20:07. Показов 12715. Ответов 36
Я за Си сижу уже.. полчаса..
встала задача: узнать количество памяти, который занимает массив, память к которому я выделяю динамически через calloc() пробовал sizeof(), но он выводит только "4".. на данный момент код выглядит так
0
|
||||||
| 13.04.2019, 20:07 | |
|
Ответы с готовыми решениями:
36
Как узнать сколько байтов в памяти занимает объект? Как узнать сколько программа занимает памяти ? Как узнать, в процесе отладки, сколько памяти занимает программа? |
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
|||||
| 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
|
||||||||||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
|||||||||
| 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
|
||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||||||
| 15.04.2019, 09:45 | ||||||
man _msize тоже не может найти. Да и вообще, переменные и функции, начинающиеся с подчеркивания обычно считаются внутрибиблиотечными и не предназначены для конечного пользователя.Судя по поиску, это очередное майкрософтовское расширение, никак не связанное со стандартом. Нет уж, нестандартные расширения это нестандартные расширения и полагаться на них нельзя.
0
|
||||||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||
| 15.04.2019, 10:04 | ||
|
COKPOWEHEU, стандарт со мной согласен.
1
|
||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||
| 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
|
|||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
||
| 15.04.2019, 15:03 | ||
|
0
|
||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
||||
| 15.04.2019, 15:44 | ||||
|
COKPOWEHEU, боже мой, вы шутите?
0
|
||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
|
| 15.04.2019, 17:05 | |
|
Поискал примеры реальных архитектур, где это могло бы встречаться. Не нашел, но упоминания, совпадающие с вашим мнением, проскакивали.
Можете привести пример реальной архитектуры, где размер указателя для разных типов данных отличается?
0
|
|
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
|
||||||||||||||||
| 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
|
||||
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
|
|
| 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 | |
|
Как узнать сколько памяти занимает таблица и каждый столбец в таблице Как узнать, сколько памяти занимает тот или иной элемент программы?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|