17 / 13 / 4
Регистрация: 19.10.2018
Сообщений: 128
|
|
1 | |
откуда в векторе лишние 8 байт?04.10.2022, 05:46. Показов 499. Ответов 2
надавно задался вопросом - почему 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
|
04.10.2022, 05:46 | |
Ответы с готовыми решениями:
2
Откуда столько элементов в векторе? Откуда берётся мусор в векторе Откуда берутся лишние элементы? Лишние символы берущиеся неведомо откуда Не могу разобраться, откуда лишние значения |
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
04.10.2022, 07:47 | 2 |
Сообщение было отмечено kapt0xa как решение
Решение
Ну загляните в отладчике внутрь вашего вектора - все должно быть видно.
Например в 64-битной Debug конфигурации Visual Studio вектор имеет размер 32 байта. Это три указателя по 8 байт: на начало данных, на конец данных и на конец выделенной памяти. Плюс еще один отладочный указатель, который, как я понимаю, ссылается на отладочные структуры данных, используемые для отслеживания принадлежности итераторов. Но достаточно переключиться в Release конфигурацию, как отладочный указатель исчезает и размер вектора становится 24. Ну так очевидно вы в отладочной конфигурации размер оценивали. Мерить что-либо, будь то скорости или размеры, в отладочной конфигурации - бессмысленное занятие.
1
|
17 / 13 / 4
Регистрация: 19.10.2018
Сообщений: 128
|
|
04.10.2022, 16:06 [ТС] | 3 |
действительно, не проверил а что там с release-версией.
0
|
04.10.2022, 16:06 | |
04.10.2022, 16:06 | |
Помогаю со студенческими работами здесь
3
Откуда берутся лишние цифры в double? Откуда взялись лишние два байта? Откуда в float лишние цифры?? Откуда берутся лишние кавычки? Откуда-то появляются лишние теги <a>! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |