Size: a a a

2020 July 25

D

Danya in supapro.cxx
Ioann_V
В каком плане и чем она мешает? Я пока что, вижу парочку плюсов: операции копирования и мува реально станут быстрее.
Минус два присваивания?)
источник

I

Ioann_V in supapro.cxx
Danya
Минус два присваивания?)
Не только. Память то у нас одна, а это кеш френдли, + tlb кеш, более того, данные вектора не будут вмещаться в стек, а это операции push, pop asm.
источник

I

Ioann_V in supapro.cxx
И все же, плюсы лучше минусов. Но, почему так не делают? Я видел, что так делают, но в Си. На счёт плюсов, не знаю делают или нет, но кмк не делают - чисто догадка. Кто подтвердит?
источник

ip

illya palkin in supapro.cxx
Ioann_V
А почему вектор и его данные(размер, итератор) не принято хранить в одном блоке памяти вместе с данными?
Ты хочешь size + capacity хранить в указателе на данные (возле самих данных) ?
источник

I

Ioann_V in supapro.cxx
не то чтобы хочу, я хочу понять почём так стоит или не стоит делать. Выравнивание?
источник

D

Danya in supapro.cxx
Ioann_V
Не только. Память то у нас одна, а это кеш френдли, + tlb кеш, более того, данные вектора не будут вмещаться в стек, а это операции push, pop asm.
Ну к тому же это лишняя аллокация, если ты создаешь пустой вектор
источник

Е

Егор in supapro.cxx
Ioann_V
не то чтобы хочу, я хочу понять почём так стоит или не стоит делать. Выравнивание?
это точно вопрос для супапро?
источник

ip

illya palkin in supapro.cxx
Ioann_V
Не только. Память то у нас одна, а это кеш френдли, + tlb кеш, более того, данные вектора не будут вмещаться в стек, а это операции push, pop asm.
size и capacity будут в регистре чаще всего. Регистры быстрее кэша
источник

I

Ioann_V in supapro.cxx
Danya
Ну к тому же это лишняя аллокация, если ты создаешь пустой вектор
Можно сразу выделить для пары элементов память, почему бы и нет?
источник

D

Danya in supapro.cxx
Ioann_V
Можно сразу выделить для пары элементов память, почему бы и нет?
Потому что это дольше, чем ничего?
источник

I

Ioann_V in supapro.cxx
illya palkin
size и capacity будут в регистре чаще всего. Регистры быстрее кэша
А в регистры они откуда придут? Из памяти конечно, Стековой. А у стековой памяти, адреса никак не соседствуют с хиповой.
источник

D

Danya in supapro.cxx
Тем более, тебе надо ребайнить аллокатор на size_t
источник

N

Nano in supapro.cxx
Ioann_V
А почему вектор и его данные(размер, итератор) не принято хранить в одном блоке памяти вместе с данными?
И правда, в этом могут быть свои плюсы.
Как я понял, предлагается хранить на стеке лишь один указатель? А в куче хранить: длину, капасити и сам массив? Ещё понадобится счётчик ссылок, чтобы последний владелец освобождал память
источник

ip

illya palkin in supapro.cxx
Ioann_V
А в регистры они откуда придут? Из памяти конечно, Стековой. А у стековой памяти, адреса никак не соседствуют с хиповой.
понял тебя. Ну, чисто логично лучше разделить
источник

ip

illya palkin in supapro.cxx
Данные есть данные, а не размер и еще какая метаинформация. Программисты любят разделять не связаные вещи
источник

I

Ioann_V in supapro.cxx
Nano
И правда, в этом могут быть свои плюсы.
Как я понял, предлагается хранить на стеке лишь один указатель? А в куче хранить: длину, капасити и сам массив? Ещё понадобится счётчик ссылок, чтобы последний владелец освобождал память
Счётчик ссылок не обязателен, это если ты про shared говоришь, но такое и с обычной реализацией можно провернуть. Копирование, то останется копированием: memcpy.
источник

D

Danya in supapro.cxx
Danya
Тем более, тебе надо ребайнить аллокатор на size_t
Не уверен как в новых стандартах с аллокаторами
Можно ли освобождать память выделенную allocator<T> с помощью allocator<U>?
источник

N

Nano in supapro.cxx
Ioann_V
Счётчик ссылок не обязателен, это если ты про shared говоришь, но такое и с обычной реализацией можно провернуть. Копирование, то останется копированием: memcpy.
Ну я так понял этот массив можно будет шарить, тогда нужно что-то, чтобы массив освобождался. Иначе, как он будет удаляться?
источник

I

Ioann_V in supapro.cxx
Nano
Ну я так понял этот массив можно будет шарить, тогда нужно что-то, чтобы массив освобождался. Иначе, как он будет удаляться?
Ну, тут все по дефолту. Шарить так то можно и обычный вектор: это типа move. Вот.
источник

D

Danya in supapro.cxx
Danya
Не уверен как в новых стандартах с аллокаторами
Можно ли освобождать память выделенную allocator<T> с помощью allocator<U>?
Или как аллокатором от Т выделить память под два сайза?)
источник