Форум программистов, компьютерный форум CyberForum.ru

Определить реальный размер массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 00:49     Определить реальный размер массива #1
У меня есть структура

C++
1
2
3
4
5
6
7
8
9
10
11
struct vvv
{
        char pp[100];
        char mm[25];
        char cc[3];
        std::string vv;
        std::string bb;
        std::string nn;
        std::vector<dds>dddx;
        int ff;
};
Где dds - тоже структура, состоящая только из string'ов
Далее я создаю массив данной структуры:
C++
1
vvv *massiv = new vvv[500];
И заполняю элементы массива, включая все string'и и vector'а неопределенным количеством элементов.

Теперь такой вопрос, sizeof(massiv) выведет мне реальный размер массива, включая размер всех строк и веторов, илиже она посчитает размер интов и чаров, а у стрингов и векторов только размер указателей?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:00     Определить реальный размер массива #2
неужели так сложно взять и проверить????

sizeof(massiv) будет = 4 (размер указателя)

вам нужен sizeof(massiv[0]); или sizeof(vvv);

я тут проверил немного, всегда выводится постоянный размер (что в принципе логично) = сумме всех данных sizeof(int +char*100 + std::string +...)

всякие штуки std::string или std::vector<int> содержат в себе уже набор данных, этот набор будет иметь одинаковый размер! а расширение там проиходит же по указателям (типа push_back()), а размер указателя при этом не изменится!
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:08  [ТС]     Определить реальный размер массива #3
Проверить не сложно, просто долго, легче спросить здесь у знатаков
Тогда другой вопрос, есть ли может какая-та функция или способ автоматизированного вычисления размера массива с такой..., или даже сложнее, структурой? Просто в моем случае всё перебирать не вариант...
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:19     Определить реальный размер массива #4
ну размер одного элемента массива таких структур, как я уже написал, будет постоянный сколько там чего не изменяй, ну а если вам нужны размеры отдельных членов структуры то придется уж их доставать методами типа .size() .length() и тп
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:23  [ТС]     Определить реальный размер массива #5
Размер stl элементов, таких как вектор и стринг вычисляется функцией size(), у других элементов иначе... при этом там тоже надо считать размер структур.
У меня очень сложная структура массива.... раза в 3 сложнее приведенной мной и элементов очень много. Если вычислять размер каждого элемента и суммировать - выйдет очень большой код анализирующий саму структуру массива и я сомневаюсь что у меня получится сделать это без ошибок...там вектора доходят до сотен тысяч стрингов...
Я знаю что если вызвать delete[] massiv; то для каждого элемента поочередно вызовется деструктор и массив будет последовательно удален, независимо от его сложности. Может быть есть какие-то способы и вычисления размера также, автоматизированно?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:37     Определить реальный размер массива #6
Цитата Сообщение от Union Посмотреть сообщение
Я знаю что если вызвать delete[] massiv; то для каждого элемента поочередно вызовется деструктор и массив будет последовательно удален, независимо от его сложности.
тем не менее , будет же вызван деструктор для каждого данного, значит если у вас там 10+10*10+20+5*40... данных, будет вызвано 100500 деструкторов, и это, я думаю, нормально.

получается что такая "сложность" это нормально!?
если какие-то элементы -структуры/классы - определи для них методы которые покажут их размер, может это поможет не запутатся.

а вообще для чего это?
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:43  [ТС]     Определить реальный размер массива #7
Это для отслеживания занимаемой памяти приложением из самого приложения... Видимо придется писать функцию, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2011, 01:50     Определить реальный размер массива
Еще ссылки по теме:

C++ Можно ли определить размер динамического двумерного массива, количество строк и столбцов?
Как определить размер класса? C++
Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:50     Определить реальный размер массива #8
понятно, надеюсь у вас выйдет то , что вы хотите сделать.
Yandex
Объявления
11.06.2011, 01:50     Определить реальный размер массива
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru