half-horse half-gateway
117 / 83 / 43
Регистрация: 10.05.2016
Сообщений: 563

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

01.01.2020, 12:25. Показов 18359. Ответов 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
6353 / 3524 / 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
6353 / 3524 / 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
6353 / 3524 / 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
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
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
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Альцгеймер и колоссальный объем вычислений
Programma_Boinc 08.08.2026
Альцгеймер и колоссальный объем вычислений Сейчас по направлению болезни Альцгеймера идет колоссальный объем вычислений. Это один из главных приоритетов проекта. Такой массовый наплыв задач. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
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
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru