С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
17 / 13 / 4
Регистрация: 19.10.2018
Сообщений: 128
1

откуда в векторе лишние 8 байт?

04.10.2022, 05:46. Показов 499. Ответов 2

Author24 — интернет-сервис помощи студентам
надавно задался вопросом - почему sizeof(string) 40 байт и выяснил, что 24 байта это указатель на начало строки, size и capacity, а 16 байт это small string optimisation. если строка помещается в 16 байтах, то в динамической памяти ей место не выделяется.

позже посмотрел размер вектора. если бы я писал аналог вектора, он бы у меня занимал 24 байта: 8-указатель, 8-size, 8-capacity. но он занимает 32 байта. зачем ему еще 8 байт?

я не дурачок, понимаю что кол-во байт может быть разным взависимости от компилятора и разрядности системы. так же на другом компиляторе может не быть small string optimisation. числа приведены для того, с чем я привык работать - visual studio 2017 x64. возможно, я неверно описал свой калькулятор, но не думаю что это играеть роль, вопрос не о компиляторе, а о том зачем там лишние байты.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2022, 05:46
Ответы с готовыми решениями:

Откуда столько элементов в векторе?
struct SReBuMa // research buildings manufacture { int life; vector <elemental_resource>...

Откуда берётся мусор в векторе
Здравствуйте! Помогите, пожалуйста ,с вектором. Никак не могу разобраться в чём проблема( Проблема...

Откуда берутся лишние элементы?
String String::operator + (String right){ int len = strlen(this->myString) +...

Лишние символы берущиеся неведомо откуда
Суть в том, что ловлю ответ сервера на свой запрос. По снифферу как запрос, так и ответ нормальные,...

Не могу разобраться, откуда лишние значения
Начал писать программу и тут такая ошибка грешу на while (getline(fin, line)) но вроде норм поэтому...

2
Вездепух
Эксперт CЭксперт С++
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
04.10.2022, 07:47 2
Лучший ответ Сообщение было отмечено kapt0xa как решение

Решение

Цитата Сообщение от kapt0xa Посмотреть сообщение
озже посмотрел размер вектора. если бы я писал аналог вектора, он бы у меня занимал 24 байта: 8-указатель, 8-size, 8-capacity. но он занимает 32 байта. зачем ему еще 8 байт?
Ну загляните в отладчике внутрь вашего вектора - все должно быть видно.

Например в 64-битной Debug конфигурации Visual Studio вектор имеет размер 32 байта. Это три указателя по 8 байт: на начало данных, на конец данных и на конец выделенной памяти. Плюс еще один отладочный указатель, который, как я понимаю, ссылается на отладочные структуры данных, используемые для отслеживания принадлежности итераторов.

Но достаточно переключиться в Release конфигурацию, как отладочный указатель исчезает и размер вектора становится 24.

Цитата Сообщение от kapt0xa Посмотреть сообщение
числа приведены для того, с чем я привык работать - visual studio 2017 x64
Ну так очевидно вы в отладочной конфигурации размер оценивали. Мерить что-либо, будь то скорости или размеры, в отладочной конфигурации - бессмысленное занятие.
1
17 / 13 / 4
Регистрация: 19.10.2018
Сообщений: 128
04.10.2022, 16:06  [ТС] 3
действительно, не проверил а что там с release-версией.
0
04.10.2022, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2022, 16:06
Помогаю со студенческими работами здесь

Откуда берутся лишние цифры в double?
У меня значения из примера выше близкие к правильным, но есть косяки - 1)в числе 3.12, откуда то...

Откуда взялись лишние два байта?
Добрый день. Я создал мини структуру(Player) и захотел посмотреть, как она будет выглядеть в...

Откуда в float лишние цифры??
вот тупой код и по логике должно вывести 1,4 (1 + 0,4) а выводит 1,40000000038212 (что то похожее)...

Откуда берутся лишние кавычки?
при сохранении excel книги в txt появляются лишние кавычки,как от этого избавиться? нужен макрос...

Откуда-то появляются лишние теги <a>!
В коде имеем всего два тега - &lt;a href=&quot;1&quot;&gt;&lt;/a&gt; и &lt;a href=&quot;2&quot;&gt;&lt;/a&gt;, открываем этот код в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru