Size: a a a

2020 August 03

I

Ioann_V in pro.cxx
Mikhail Voronov
а константы расширения одинаковые?
Да. 2 и там и там. Реализация GCC. Процессор 3900x ryzen. Ubuntu.
источник

MV

Mikhail Voronov in pro.cxx
ну вообще это вроде известный факт, что для конкретной задачи можно написать более специализированную версию чего-то бы то не было, что будет быстрее generic варианта
источник

MV

Mikhail Voronov in pro.cxx
вот в generic варианте не всегда нужно память выделять при создании вектора, соответственно, можно придумать бенчмарк, в котором твой вектор будет медленее
источник

I

Ioann_V in pro.cxx
Mikhail Voronov
ну вообще это вроде известный факт, что для конкретной задачи можно написать более специализированную версию чего-то бы то не было, что будет быстрее generic варианта
Ну я не про это. По итогу, если делать свой вектор stl like, но с преалокацией, надо как минимум обернуть аллокатор стандартный во что-то, что скажет о том, что исключение мы бросать можем.
источник

I

Ioann_V in pro.cxx
Mikhail Voronov
вот в generic варианте не всегда нужно память выделять при создании вектора, соответственно, можно придумать бенчмарк, в котором твой вектор будет медленее
Ну, если ты посмотришь на /0(создание пустого вектора), то увидишь, что там он медленнее.
источник

DS

Dmitry Sokolov in pro.cxx
Ioann_V
Угу, +- то и выходит. Но, если что, проверка капасити там есть. И это тест, p_b операции.
Аналогично string, для vector тоже были предложения с uninitialized resize, совместить резервирование с заполнением без default инициализации.
источник

MV

Mikhail Voronov in pro.cxx
Ioann_V
Ну, если ты посмотришь на /0(создание пустого вектора), то увидишь, что там он медленнее.
а есть код бенчмарков?
источник

I

Ioann_V in pro.cxx
Mikhail Voronov
а есть код бенчмарков?
Да, код есть. Но это скорее будет тратой времени, так как у меня не с этим вопрос, был. + я использовал чистый malloc. New конвертируется call New, а он, как помню, в call malloc.
источник

m

magras in pro.cxx
Ioann_V
Ну я не про это. По итогу, если делать свой вектор stl like, но с преалокацией, надо как минимум обернуть аллокатор стандартный во что-то, что скажет о том, что исключение мы бросать можем.
А нельзя написать обертку над стандартным аллокатором, который в конструторе будет выделять память и возвращать при первом вызове allocate?
источник

I

Ioann_V in pro.cxx
magras
А нельзя написать обертку над стандартным аллокатором, который в конструторе будет выделять память и возвращать при первом вызове allocate?
Можно, но я хочу, чтобы это делал таки вектор. Ну, я уже так делаю. А своим вопросом, хотел получить кирпичом по голове от сообщества. Вроде, голова цела.
источник

VR

Vladyslav Ryuzaki in pro.cxx
/0
источник

VR

Vladyslav Ryuzaki in pro.cxx
/0
источник

m

magras in pro.cxx
Ioann_V
Можно, но я хочу, чтобы это делал таки вектор. Ну, я уже так делаю. А своим вопросом, хотел получить кирпичом по голове от сообщества. Вроде, голова цела.
Мне было бы любопытно посмотреть на сравнение с вашей реализацией вектора, потому что как тут уже упоминали самая дорогая операция это вызов allocate и мне кажется такое решение должно иметь примерно те же тайминги при коде меньшем на порядки.
источник

I

Ioann_V in pro.cxx
magras
Мне было бы любопытно посмотреть на сравнение с вашей реализацией вектора, потому что как тут уже упоминали самая дорогая операция это вызов allocate и мне кажется такое решение должно иметь примерно те же тайминги при коде меньшем на порядки.
Ещё свою реализацию не дописал, хотя писать там нечего, сомневаться в моих словах не стоит. Тесты которые я прогонял велись над size_t элементами. Preallocate был выставлен в 32 элемента. Grow x 2.
// P.s: См. Био
источник

MV

Mikhail Voronov in pro.cxx
Ioann_V
Ещё свою реализацию не дописал, хотя писать там нечего, сомневаться в моих словах не стоит. Тесты которые я прогонял велись над size_t элементами. Preallocate был выставлен в 32 элемента. Grow x 2.
// P.s: См. Био
reserve был для stl версии перед использованием?
источник

I

Ioann_V in pro.cxx
Mikhail Voronov
reserve был для stl версии перед использованием?
Нет. Этого не было. Обычный p_b. Но, учту, выставлю, а тесты и реализацию залью сюда.
источник

D

Danya in pro.cxx
Переслано от Danya
У меня такой вопрос про концепты, нормально ли они работают в forward decl? Я проверял, вроде норм, но может я что-то пропустил
Пример:
struct tag; // forward decl

template <typename T>
concept callable_with_tag = requires(T obj) {
   { obj(std::declval<tag>()) }'
};

struct tag {}; // definition

template <typename T>
  requires callable_with_tag<T>
void foo() {
 ...
};
Поведение же будет такое, как и с инстанциациями шаблонов -- будет окончательная проверка только при самой инстанциации?
источник

MV

Mikhail Voronov in pro.cxx
Ioann_V
Нет. Этого не было. Обычный p_b. Но, учту, выставлю, а тесты и реализацию залью сюда.
ну ты же понимаешь, что сделать нормальный бенчмарк сложно. Вот мне кажется, что выбор константы 32 тут сильно влияет, а также какой аллокатор был? aslr off/on? воспроизводимый ли тест?
источник

MV

Mikhail Voronov in pro.cxx
константа 32 - как раз из-за неэффективного расширения вектора в 2 раза, я бы предложил сделать отдельный тест с фактором = 1.5
источник

I

Ioann_V in pro.cxx
Mikhail Voronov
ну ты же понимаешь, что сделать нормальный бенчмарк сложно. Вот мне кажется, что выбор константы 32 тут сильно влияет, а также какой аллокатор был? aslr off/on? воспроизводимый ли тест?
Аллокатор: простой malloc, то, же что и у new под капотом. Ну, да неточности есть. Я конечно понимаю.
источник