Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/88: Рейтинг темы: голосов - 88, средняя оценка - 4.53
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563

Получить размер строки в байтах

01.01.2020, 12:25. Показов 17913. Ответов 40

Студворк — интернет-сервис помощи студентам
Добрый день! Имеется, например, следующая строка:
C++
1
2
int a = rand() % 1000, b = rand() % 200;
string s = "a = " + to_string(a) + "b = " + to_string(b);
Необходимо вычислить размер занимаемой данной строкой памяти. Каким образом это возможно сделать? Заранее спасибо за ответ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.01.2020, 12:25
Ответы с готовыми решениями:

Размер памяти в байтах
Подскажите, пожалуйста, как узнать колл-во байт между двумя указателями? Т.е. к примеру: int *a = new int; int *b = new int; int...

Размер объекта в байтах
Разъясните пожалуйста следующую ситуацию. Почему при таком class A { int x; int y; double a; }; и таком...

Размер файла в байтах
Во первых надо узнать размер файла в байтах, фаил открыт потока ifstream fr, функция sizeof(fr) возвращяет значение 176, фаил имеет...

40
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
01.01.2020, 12:49
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Необходимо вычислить размер занимаемой данной строкой памяти. Каким образом это возможно сделать? Заранее спасибо за ответ.
как то так:
C++
1
s.size();
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 13:09
BlackStoneBlack, если
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
занимаемой данной строкой памяти
то возможно вы ищете:
C++
1
2
3
string str="Happy New Year!";
string::size_type sz=sizeof(str);
cout<<sz;//24
1
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
01.01.2020, 14:50
Цитата Сообщение от IGPIGP Посмотреть сообщение
string::size_type
Страшно, лучше auto
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 15:17
Цитата Сообщение от IGPIGP Посмотреть сообщение
string::size_type sz=sizeof(str);
Почему здесь string::size_type?
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
01.01.2020, 15:24
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему здесь string::size_type
size_t без namespace, так не интересно
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 17:39
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему здесь string::size_type?
https://ru.cppreference.com/w/cpp/types/size_t
Примечания

size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массивы). На большинстве платформ (за исключением систем с адресацией по сегментам) size_t может безопасно хранить значение любого указателя, кроме указателей на члены классов, таким образом, являясь синонимом std::uintptr_t.

std::size_t обычно используется для индексации массивов и счетчиков циклов. Программы, которые используют другие типы, например unsigned int, для индексации массивов, могут неправильно работать на, например, 64-битных системах, когда индекс превзойдет UINT_MAX или если он полагается на возможность переполнения 32-битного числа.

При индексации C++ контейнеров, таких как std::string, std::vector, и т.д. для индекса используется соответствующий тип, объявленный через typedef size_type в типе контейнера. Обычно этот тип определен как синоним std::size_t.
То есть, это обычно какой-то беззнаковый целый тип. И этот факт может обычно кого-то лишить покоя. Это значит, что в каком-то случае, кого-то написавшего:
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
string::size_type sz=sizeof(str);
может ожидать катастрофа.
При чём оно именно здесь - затрудняюсь ответить. Но ваше недоумение передаётся и мне.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 17:51
IGPIGP, почему не size_t? В этом был мой вопрос.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 18:00
Цитата Сообщение от Croessmah Посмотреть сообщение
IGPIGP, почему не size_t? В этом был мой вопрос.
Это уже легче. То есть, при чём оно тут, уже не так важно?
Croessmah, я не возражаю против size_t. Возможно, есть платформа, где это окажется существенным. Вопрос был о размере в байтах, что к индексации относится лишь косвенно. Согласен. Для таких строк, как wstring, например, могут быть различия, для много мегабайтовой кодировки, включающей китайский диалект восточно-марсианчкого языка. На платформе для запуска межтрансметагалактических ракет.
С Новым Годом.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 18:18
IGPIGP, Вы не поняли. Результат sizeof - size_t. Почему берется псевдоним string::size_type, если к длине строки sizeof отношения не имеет? Почему тогда не vector<int>::size_type?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 18:36
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему берется псевдоним string::size_type, если к длине строки sizeof отношения не имеет?
Цитата Сообщение от IGPIGP Посмотреть сообщение
Обычно этот тип определен как синоним std::size_t.
Имеет. Но если в данной теме вам очень важно сказать, что string::size_type, это недопустимо, - я соглашусь. Но хотелось бы видеть пример, где такая подстановка приведёт к крэшу. Это не потому что у меня тоже боль в мозгу. Нет. Просто, действительно интересно узнать. Причина - выяснить, где это может стать проблемой, конечно. То есть, вопрос не в том, чтобы выяснить, знаете ли вы, где это может стать проблемой.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 18:55
Цитата Сообщение от IGPIGP Посмотреть сообщение
Имеет.
Не имеет. string::size_type - это то, что возвращает string:size, т.е. длина строки в символах, а не размер объекта в байтах.
С таким же успехом можно было бы взять uintptr_t (при условии идентичности с size_t) или любой другой неподходящий по смыслу псевдоним.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 19:28
Цитата Сообщение от Croessmah Посмотреть сообщение
неподходящий по смыслу
Цитата Сообщение от Croessmah Посмотреть сообщение
Не имеет. string::size_type - это то, что возвращает string:size, т.е. длина строки в символах, а не размер объекта в байтах.
Почти. Компилятор не выдаёт ошибок и даже предупреждений.
BlackStoneBlack, мы тут важные вопросы обсуждаем. Как видите. Однако, нужно признать, что вопрос
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Необходимо вычислить размер занимаемой данной строкой памяти.
требует уточнения. Дело в том, что размер объекта string это не размер её массива данных. Это разные вещи. Объект строки занимает некоторое количество байт независимо от размера данных которые связаны с ним как с дескриптором. По умолчанию данные аллоцируются в куче.
C++
1
2
3
4
5
6
7
8
9
10
11
12
string str;
string::size_type sz=sizeof(str);
cout << sz;//24 хотя пусто
cout<<"\n___________\n";
str=="Happy New Year!";
sz=sizeof(str);
cout << sz;//24
cout<<"\n___________\n";
for(int i=0; i<100500; ++i)
str+='a';
sz=sizeof(str);
cout << sz << '\t' << str.size();
Я могу лишь предположить, что общий размер не может быть меньше чем sizeof(str)+str.size() (при однобайтовой кодировке).
То есть, для выяснения, того о чём мы толкуем с уважаемым Croessmah, нужно бы знать какой из перечисленных типов шире. Остальное, - мелочи.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 19:30
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, для выяснения, того о чём мы толкуем с уважаемым Croessmah
Я вообще не об этом...
0
01.01.2020, 19:31

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Я вообще не об этом...
Я догадывался, но не подал виду.

0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
01.01.2020, 19:36
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я могу лишь предположить, что общий размер не может быть меньше чем sizeof(str)+str.size() (при однобайтовой кодировке)
я бы даже предположил, что sizeof(str)+str.capacity()
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.01.2020, 19:41
Цитата Сообщение от IGPIGP Посмотреть сообщение
что общий размер не может быть меньше чем
Может, например, если применилась SSO.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 20:11
Цитата Сообщение от Croessmah Посмотреть сообщение
Может, например, если применилась SSO
Это в контексте темы вообще путь в никуда. Я хочу повторить лишь:
Цитата Сообщение от IGPIGP Посмотреть сообщение
вопрос
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Необходимо вычислить размер занимаемой данной строкой памяти.
требует уточнения.
Если речь о размере данных, то ответ _stanislav, вполне соответствует минимуму. В то время, как нюансы аллокации могут приводить к тому, что реально размер под данные превышает полезно занятый объём, - см. ответ от Алексей1153. А размер объекта string - третье. SSO - совсем четвёртое, кстати, - см. замечание от Croessmah .
Я лишь пытался показать тот факт, что из вопроса не ясно о чём вы спрашиваете.
Остальное - нюансы обсуждения.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
01.01.2020, 21:48
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я лишь пытался показать тот факт, что из вопроса не ясно о чём вы спрашиваете.
То самое чувство когда нашёл крайнего
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 22:12
Цитата Сообщение от AndryS1 Посмотреть сообщение
То самое чувство когда нашёл крайнего
Кто кого нашёл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.01.2020, 22:12
Помогаю со студенческими работами здесь

Размер переменных в байтах
Доброго времени суток! Не могу разобраться в переводах из шестнадцатиричной системы счисления в двоичную. Ячейка в памяти компьютера...

Вычислить размер файла в байтах
используя функции seekg и tellg class fileTxt { public: fileTxt() {}; ~fileTxt() {}; template&lt;class T&gt; void writeFile(T...

Подсчитать размер файлов F1 и F2 (в байтах)
Постановка задачи: Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию Выполнить задание. При разработке...

Как измерить размер функции в байтах?
вот есть функция. сколько байт она занимает?

Как узнать размер std::wstring в байтах?
:) ну как бэ вопрос в шапке :)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru