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

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

01.01.2020, 12:25. Показов 18205. Ответов 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
6479 / 5702 / 1132
Регистрация: 11.10.2019
Сообщений: 15,188
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
6479 / 5702 / 1132
Регистрация: 11.10.2019
Сообщений: 15,188
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru