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

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

01.01.2020, 12:25. Показов 18303. Ответов 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
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
01.01.2020, 22:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кто кого нашёл?
Шло рассуждение с Croessmah и всё закончилось тем что ТС не правильно сформулировал тему
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2020, 23:11
Цитата Сообщение от AndryS1 Посмотреть сообщение
Шло рассуждение с Croessmah и всё закончилось тем что ТС не правильно сформулировал тему
Не понимаю, что заставляет вас это писать. Вы оцениваете происходящее? Почему бы вам не написать свой вариант ответа, AndryS1?
Я начал с того что:
Цитата Сообщение от IGPIGP Посмотреть сообщение
BlackStoneBlack, если
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
Посмотреть сообщение
занимаемой данной строкой памяти
то возможно вы ищете:
где в явной форме выразил тот факт, что вопрос мене не ясен. Размер объекта string это может быть понято как размер строки. И предложил ответ. Обсуждение с Croessmah начато не мной и в форме "при чём тут?". Пользы в дальнейшем диалоге для темы, имхо, не много. Далее, я обратился к ТС, чтобы сказать об этом, потому что вопрос темы остался не ясен и не раскрыт. Не уверен в том, что должен давать вам подобные объяснения.
Напишите свой ответ.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
01.01.2020, 23:31
Цитата Сообщение от IGPIGP Посмотреть сообщение
Почему бы вам не написать свой вариант ответа
мой вариант ответа, что ответа нет, либо он есть ~=~ +1 = ~
0
01.01.2020, 23:44

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
обратился к ТС, чтобы сказать об этом, потому что вопрос темы остался не ясен и не раскрыт
Мне кажется на тот момент ТС уже пометил ваш ответ как "Лучший ответ"

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 00:07
Цитата Сообщение от AndryS1 Посмотреть сообщение
Мне кажется на тот момент ТС уже пометил ваш ответ как "Лучший ответ"
AndryS1, вы сконцентрированы на оценках. При чём тут оценки? Я дал ответ и в нём - вопрос.
Дайте свой. Мне ваша оценка ни к чему, если вам нужно явно сказать.
Цитата Сообщение от _stanislav Посмотреть сообщение
мой вариант ответа, что ответа нет, либо он есть ~=~ +1 = ~
_stanislav, не понял, что ты хочешь сказать. Твой вариант есть. Он выражает минимальный объём, который гарантирует сохранение данных. Однако, на деле, памяти может потребоваться больше. Если не учитывать варианты для разделяемого представления, где сумма размеров данных для строковых объектов не равна объёму памяти, который данные этой группы объектов занимают.
_stanislav, мне самому интересно, есть ли способ узнать точно общий размер памяти выделенный для заданной строки, в самом общем случае.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
02.01.2020, 00:11
Цитата Сообщение от IGPIGP Посмотреть сообщение
При чём тут оценки
Разве метка "лучший ответ" не значит что оно является ответом для ТС?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.01.2020, 00:18
Цитата Сообщение от IGPIGP Посмотреть сообщение
мне самому интересно, есть ли способ узнать точно общий размер памяти выделенный для заданной строки, в самом общем случае.
Это зависит от конкретной реализации и используемого аллокатора, так что в самом общем случае не получится, по любому придется ковыряться в "специфичных" кишках.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 00:22
Цитата Сообщение от AndryS1 Посмотреть сообщение
Разве метка "лучший ответ" не значит что оно является ответом для ТС?
Вы хотите быть арбитром? Пусть ТС сам решит, что ему нужно. Может именно, размер объекта string ему и был нужен. Или, - может, это что-то добавило к тому, что он ищет. Пока он не сказал ни кто не узнает.
Это же вас не касается. Напишите свой ответ.

Добавлено через 3 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Это зависит от конкретной реализации и используемого аллокатора, так что в самом общем случае не получится, по любому придется ковыряться в "специфичных" кишках.
zayats80888, это несомненно. Однако получить размер типа на данном компиляторе не сложно, обычно. Несмотря на то, что размер int, например, может зависеть от платформы.
Мне интересно, есть ли способ получить размер заданного строкового объекта из некоторой группы, в рантайме, в конкретный момент.
Это и будет для меня критерием, того имеет ли вопрос, корректный ответ.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.01.2020, 01:11
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это и будет для меня критерием, того имеет ли вопрос, корректный ответ.
Если речь о вопросе ТС, то судя по всему речь идет именно о (s.size() + 1) * sizeof(std::string::value_type) т.е. о размере нультерминальной строки

Добавлено через 11 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Мне интересно, есть ли способ получить размер заданного строкового объекта из некоторой группы, в рантайме, в конкретный момент.
Наверное есть, но это далеко за пределами "С++ для начинающих"
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 01:19
zayats80888, может быть. Для std::string который std::basic_string<char>, sizeof(std::string::value_type) это sizeof(char) и на платформа известных новичкам) (мне например) - один байт. Тогда в сухом остатке:
s.size() + 1)
при чём не учитывая capacity. Допустим. Но если уж учитывать терминатор, то почему не учесть память самого объекта (на стеке, к примеру)?
zayats80888, я не спорю, - больше вариантов, - лучше)
1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.01.2020, 01:27
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но если уж учитывать терминатор, то почему не учесть память самого объекта (на стеке, к примеру)?
Можно и учесть(правда к чему тогда тот "сложный" код, что ТС прилепил к вопросу), короче
Цитата Сообщение от IGPIGP Посмотреть сообщение
больше вариантов, - лучше)
Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Для std::string который std::basic_string<char>, sizeof(std::string::value_type) это sizeof(char) и на платформа известных новичкам)
Ну я не совсем корректно написал, правильнее было sizeof(decltype(s)::value_type)
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 01:37
Цитата Сообщение от zayats80888 Посмотреть сообщение
к чему тогда тот "сложный" код, что ТС прилепил к вопросу
Это глубоко философский вопрос. Если посмотреть на строку:
C++
1
"a = " + to_string(a) + "b = " + to_string(b)
становится ясно, что размер а, который sizeof(int) и обычно это 4 - сольётся с b, то есть строка будет несколько странной. Но если идти по формальным признакам то
C++
1
2*sizeof(int)+2*5*sizeof(char)
И это инфа времени компиляции. Может получиться 18)
Но я не углублялся.
0
02.01.2020, 01:42

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
2*sizeof(int)+2*5*sizeof(char)
Вы так не шутите, могут не понять :)

0
02.01.2020, 01:47

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Вы так не шутите, могут не понять :)
это я наврал конечно. Размер строки от целого числа можно получить только из строки, что верно то верно. Но почему эта строка должна сливаться с с символом обозначающим имя числа - b ?? Пробела же не хватает. Смысл моей последней сентенции в том, что я воспринял вопрос в общеи виде и не вглядываясь в конкретную строку. :)

0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
02.01.2020, 11:07  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вопрос требует уточнения.
Ну, тогда подробнее. По сути, это надо было в раздел C++ WinAPI писать, но я не подумал, что всё будет так сложно. В общем, суть в том, что мне нужно записать строку в файл через отображение файла на память. И, если я правильно всё понимаю, то мне нужно получить размер занимаемой строкой памяти, которая формируется подобным из шапки образом, дабы файл формировался корректно. То есть через MapViewOfFile я получаю отображение необходимого размера, куда я и должен записать данные из формированной строки. Причем MapViewOfFile приводится к char*, а, значит, скорее всего, нужно работать с string.c_str().
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 11:20
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
скорее всего, нужно работать с string.c_str()
В общем, да, наверное.
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,285
02.01.2020, 11:32
BlackStoneBlack, тогда в файле должно быть место под string.size() байтов. Завершающий ноль не входит в эту длину
0
half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563
02.01.2020, 11:36  [ТС]
Алексей1153, тоже вот об этом подумал. Но пока что не особо выходит.
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,285
02.01.2020, 11:59
BlackStoneBlack, что именно не выходит? Тут всё однозначно
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 12:07
BlackStoneBlack, я не вникал, во всю эту си-шную магию (С+winapi -хорошие разделы, кстати), но вероятно вам придётся иметь дело с каким-то способом буферизации. В этом смысле, сплиттер для записей отдельных строк не помешал бы. Терминатор - вполне хорош. Свой пацан, хоть и из Австрии. И всегда I will be back! Ну то есть, как все мы тут. В конце строки - значит. Ну и чтобы тот кто будет это декодировать не оказался там же, может BOM соорудить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2020, 12:07

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru