Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Уважаемые эксперты, подскажите почему такой код выводит 10 Хотя должен выводить 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 22:32 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
И еще вопрос t tt{}; t tt1{}; Эти два объекта были созданы на стеке Как только мы вышли из метода - к чему мы вообще обращаемся итерируясь по вектору ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 22:34 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Все я понял причину проблемы Вопрос снят Замена на t *tt = new t(); t *tt1 = new t(); s.emplace_back(tt); s.emplace_back(tt1); решила проблему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 22:35 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Еще вопрос std::vector<t> getVector() { std::vector<t> s{}; t *tt = new t(); t *tt1 = new t(); s.push_back(*tt); s.push_back(*tt1); -- почему на этой точке возникает вызов деструктора класса t ? return s; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 23:32 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semenЕще вопрос std::vector<t> getVector() { std::vector<t> s{}; t *tt = new t(); t *tt1 = new t(); s.push_back(*tt); s.push_back(*tt1); -- почему на этой точке возникает вызов деструктора класса t ? return s; }Потому что вектор расширяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 23:51 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semenИ еще вопрос t tt{}; t tt1{}; Эти два объекта были созданы на стеке Как только мы вышли из метода - к чему мы вообще обращаемся итерируясь по вектору ? К мусору. Не надо использовать указатели лишний раз, если STL и нет понимания. Но в целом,нужно проучить понятия времени жизни объектов и точки их создания и удаления. Иначе код будет неоптимальным из-за созданий/копирований штучных объектов. Раз этак в несколько медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 00:16 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semenВсе я понял причину проблемы Вопрос снят Замена на t *tt = new t(); t *tt1 = new t(); s.emplace_back(tt); s.emplace_back(tt1); решила проблемуЗато добавила утечку памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 00:18 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semen Код: plaintext 1. 2. 3. 4. если делать так, надо после использования почистить память, которую выделила функция new а именно: пробежаться по вектору и удалить все его элементы Код: plaintext 1. 2. 3. если не хочется удалять память вручную (лучше никогда этого вручную не делать) надо везде t* заменить на shared_ptr<t>, а tt = new t(); заменить на tt = make_shared<t>(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 05:19 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semen Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Уважаемые эксперты, подскажите почему такой код выводит 10 Хотя должен выводить 11. вообще то код ничего не должен, может выводить все, что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 08:43 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semenИ еще вопрос t tt{}; t tt1{}; Эти два объекта были созданы на стеке Как только мы вышли из метода - к чему мы вообще обращаемся итерируясь по вектору ? вот именно, что ни к чему. к мусору. к тени отца Гамлета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 08:44 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semenЕще вопрос std::vector<t> getVector() { std::vector<t> s{}; t *tt = new t(); t *tt1 = new t(); s.push_back(*tt); s.push_back(*tt1); -- почему на этой точке возникает вызов деструктора класса t ? return s; } не возникает. код тоже неправильный, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 08:47 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
MasterZivsemen.s.semenЕще вопрос std::vector<t> getVector() { std::vector<t> s{}; t *tt = new t(); t *tt1 = new t(); s.push_back(*tt); s.push_back(*tt1); -- почему на этой точке возникает вызов деструктора класса t ? return s; } не возникает. Как кацегорично https://wandbox.org/permlink/DXb0QP66YmWi8NNp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 09:57 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
a guestMasterZivпропущено... не возникает. Как кацегорично https://wandbox.org/permlink/DXb0QP66YmWi8NNp Там на 5 объектов 3 вызова диструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 10:08 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Для понимания того, о чем говорит a guest, поставьте Код: plaintext 1. перед первым push_back. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 11:07 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Dima Ta guestпропущено... Как кацегорично https://wandbox.org/permlink/DXb0QP66YmWi8NNp Там на 5 объектов 3 вызова диструктора. и будет их все больше и больше по мере роста вектора. Как правильно ответил a guest происходит реаллокация вектора. использование reserve избавит от "лишних" обьектов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 11:09 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
OoCcи будет их все больше и больше по мере роста вектора. Как правильно ответил a guest происходит реаллокация вектора. использование reserve избавит от "лишних" обьектов Или можно сделать noexcept move-конструктор. Именно такой будет вызываться при реаллокации вектора, если существует, взамен конструктору копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 09:19 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZOoCcи будет их все больше и больше по мере роста вектора. Как правильно ответил a guest происходит реаллокация вектора. использование reserve избавит от "лишних" обьектов Или можно сделать noexcept move-конструктор. Именно такой будет вызываться при реаллокации вектора, если существует, взамен конструктору копирования. Нет. Это нехорошо. В большинстве случаев замена конструктора копирования на конструктор перемещения большой выгоды не даёт. Реаллокэйшн нужно исключать. Иначе этот контэйнер работает в а-ля-джава режиме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 16:37 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
OoCcНет. Это нехорошо. В большинстве случаев замена конструктора копирования на конструктор перемещения большой выгоды не даёт . Реаллокэйшн нужно исключать. Иначе этот контэйнер работает в а-ля-джава режиме. Лолшлто? Про замену одного конструктора другим никто не говорил. Именно move-семантика позволяет избежать копирования при вынужденном реаллокейшне. Разумеется, когда ты знаешь приблизительное или точное количество элементов нужно использовать reserve. Но, вектор так спроектирован чтобы расширяться, вынуждено перемещая объекты в новую область памяти, когда упирается в размер выделенного блока. Так что, когда есть возможность организовать move-конструктор и оператор присваивания для элементов в векторе -- лучше всего воспользоваться этой возможностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 17:24 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZИменно move-семантика позволяет избежать копирования при вынужденном реаллокейшне. Можно поподробнее. Не силен в современном С++. В С++ нет реаллокейшена, т.е. realloc() не используется. Увеличение размера вектора это как минимум memcpy(), если при этом пресечь вызовы деструкторов и конструкторов, то можно на этом время сэкономить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 18:56 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Похоже, чуваку нужен простой контейнер с указателями. Думаю, нужным ему ответом будет unique_ptr: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 18:59 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
semen.s.semen, если ты не в курсе, то в скобках для unique_ptr<CSome> указываются параметры как для конструктора SCome, т.е. если у тебя конструктор выглядит CSome(5), то и указатель надо создавать как make_unique<CSome>(5). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:06 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
Dima TМожно поподробнее. Не силен в современном С++. В С++ нет реаллокейшена, т.е. realloc() не используется. Реаллокейшн не значил вызов realloc'а. Это просто удобный термин обозначающий определённую последовательность действий в реализации std::vector'а. Например, в док референсе употребляется термин "Reallocation". Не суть, в общем. Dima TУвеличение размера вектора это как минимум memcpy(), если при этом пресечь вызовы деструкторов и конструкторов, то можно на этом время сэкономить. memcpy смотря для чего. Для POD-типов memcpy -- вполне себе решение. А вот для комплексных типов классов и структур не всё так просто. Хотя бы потому что у объекта в векторе тогда вообще не будет возможности хоть как-то уведомить внешний мир, что он-то оказывается переехал по новому адресу. Ну или хотя бы потому что внутри объекта могут быть сохранены указатели на внутренние поля (why not?), что сделает их невалидными после копирования в новое место. Вообще, ЕМНИП нет никаких гарантий, что memcpy'ed объект будет работать валидно, ибо это Implementation Defined. Поэтому по классике старых плюсов, вызываются copy-ctor'ы на только что выделенном куске памяти через placement new и затем деструкторы. Понятно, что по задумке конструктор копирования создаёт копию объекта, в то время как move-ctor просто меняет владение внутренними ресурсами объекта. Советую глянуть это короткое видео от Джейсона Тёрнера, который на наглядном примере объясняет как это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 20:51 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZOoCcНет. Это нехорошо. В большинстве случаев замена конструктора копирования на конструктор перемещения большой выгоды не даёт . Реаллокэйшн нужно исключать. Иначе этот контэйнер работает в а-ля-джава режиме. Лолшлто? Про замену одного конструктора другим никто не говорил. Именно move-семантика позволяет избежать копирования при вынужденном реаллокейшне. Разумеется, когда ты знаешь приблизительное или точное количество элементов нужно использовать reserve. Но, вектор так спроектирован чтобы расширяться, вынуждено перемещая объекты в новую область памяти, когда упирается в размер выделенного блока. Так что, когда есть возможность организовать move-конструктор и оператор присваивания для элементов в векторе -- лучше всего воспользоваться этой возможностью. Лолто. А move семантика это что за зверь? Это и есть замена конструкторов копирования на конструкторы перемещения при реаллокации вектора. Дальше читаем снова моё предыдущее сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 23:39 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZНо, вектор так спроектирован чтобы расширяться, вынуждено перемещая объекты в новую область памяти, когда упирается в размер выделенного блока. Так что, когда есть возможность организовать move-конструктор и оператор присваивания для элементов в векторе -- лучше всего воспользоваться этой возможностью. Глупости. в 99% случаях замена вектора на декъю решает все проблемы с внутренними перемещениями и лишними обьектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 00:12 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
OoCcА move семантика это что за зверь? RTFM OoCcЭто и есть замена конструкторов копирования на конструкторы перемещения при реаллокации вектора. Дальше читаем снова моё предыдущее сообщение. Да нету никакой замены. Конструкторы копирования и перемещения могут сосуществовать в одном классе легко. Вектор при реаллокации смотрит через type_traits есть ли у T noexcept move-конструктор и использует его. Если его нет, он будет использовать copy-конструктор. Если и его нет, попытается найти обычный move-констуктор. Если его нет, то ничего не скомпилируется. Читаем сначала раздел Exceptions/(since C++11) . Дальше подкрепляем матчасть видео из моего предыдущего сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 08:37 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
OoCcГлупости. В каком месте? OoCcв 99% случаях замена вектора на декъю решает все проблемы с внутренними перемещениями и лишними обьектами. Да, дек лишён некоторых недостатков вектора -- вставки в начало и в конец не инвалидируют итераторы, так же как и удаление, так как в памяти он хранится в виде двумерного массива, а не полностью непрерывно, как вектор. Однако тут сразу встаёт вопрос со вставкой элемента в середину, а также вопрос кэширования данных дека CPU. Так что, ни то, ни другое -- не панацея, везде надо искать компромиссы для своего конкретного случая. И в случае с вектором из ваших классов можно значительно уменьшить накладные расходы на реаллокацию реализовав правильно move-конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 08:53 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZИли можно сделать noexcept move-конструктор. Именно такой будет вызываться при реаллокации вектора, если существует, взамен конструктору копирования.При релокации вектора (при исчерпании зарезервированного места) вызываются конструкторы? Не верю. Для "пользователя" это вообще невидимое событие, чисто технически необходимое, перенос куска памяти (набора указателей в случае вектора) в новое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 05:20 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbПри релокации вектора (при исчерпании зарезервированного места) вызываются конструкторы? Не верю. Для "пользователя" это вообще невидимое событие, чисто технически необходимое, перенос куска памяти (набора указателей в случае вектора) в новое место. Ну приехали... Может, стоило хотя бы проверить? Просто запусти этот код и проверь (обещаю, он не майнит биткойны): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. У меня получился такой вывод: capacity=0 S() capacity=1 S() S(S const &) capacity=2 S() S(S const &) S(S const &) capacity=4 Program ended with exit code: 0 Попробуй объяснить каждую строчку вывода. Имеем три вызова дефолтного конструктора и три вызова конструктора копирования. А потом, если ты просто добавишь noexcept к move-конструктору, то будет вызываться именно он: capacity=0 S() capacity=1 S() S(S &&) capacity=2 S() S(S &&) S(S &&) capacity=4 Program ended with exit code: 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 07:18 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZПросто запусти этот код и проверь А, блин, я понял, в чём дело (но успел посмотреть код под двумя компиляторами), ну да, всё верно, там потому что в векторе хранятся объекты. Поэтому при релокации, stl будет их переносить, потому что по-другому просто не умеет. А если std::move есть, то да, можно и не переносить (к чему и стремились), потому что сами объекты по сути не меняются. я не заметил подвох потому что обычно так: vector<S> не делаю (а стоило, видимо. "В жизни нужно попробовать всё") единственное, прошу разъяснить, как noexcept влияет на выбор конструктора. У меня (С++11) без noexept вызывался move-конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 13:48 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbединственное, прошу разъяснить, как noexcept влияет на выбор конструктора. У меня (С++11) без noexept вызывался move-конструктор. ЕМНИП, не noexcept move-конструктор будет вызываться только тогда, когда нет вообще доступного конструктора копирования и есть явно заданый move-конструктор без noexcept'а. То есть, приоритет выбора такой, сверху вниз: 1. noexcept move-ctor 2. copy-ctor 3. move-ctor 4. error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 14:28 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbтам потому что в векторе хранятся объекты. Логично. Для POD-типов, включая сырые указатели, ты не переопределишь move-конструктор. В таких случаях, вектор просто делает memmove, что как бы намекает ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 14:31 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZЛогично.Логично то, что один раз закинув объект в вектор, я не должен ожидать повторный вызов конструктора для него, так как сам я объект не перемещаю, да и при растяжении вектора объект перемещаться не должен в идеале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 07:38 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbпри растяжении вектора объект перемещаться не должен в идеале. Как тогда можно увеличить размер вектора, сохранив последовательное расположение его элементов в памяти? Чудес не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 07:49 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbNekZЛогично.Логично то, что один раз закинув объект в вектор, я не должен ожидать повторный вызов конструктора для него, так как сам я объект не перемещаю, да и при растяжении вектора объект перемещаться не должен в идеале. Может, тогда тебе нужен другой контейнер, например, std::list? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 08:17 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZМожет, тогда тебе нужен другой контейнер, например, std::list?да не, я просто в векторах указатели/POD храню, так что всё ок. Но я действительно не ожидал, что будет вызываться конструктор при переносе внутренностей вектора. Почему бы не перенести байт-в-байт данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 08:37 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbПочему бы не перенести байт-в-байт данные? Например там может быть указатель на буфер внутри объекта. Недавно обсуждали глюк с std::string . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 08:43 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbда не, я просто в векторах указатели/POD храню, так что всё ок. Тогда ты всё равно должен помнить, что если хранишь умные указатели в векторе, у них, скорее всего, иногда вызывается move-ctor ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 19:46 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbя просто в векторах указатели/POD храню ну а сами объекты размещаются на куче черти где, и последовательный перебор будет со скоростью работы памяти(раза в 3-4 медленнее, чем могло бы)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2018, 10:28 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZдолжен помнитьда, теперь буду! alex_kну а сами объекты размещаются на куче черти где, и последовательный перебор будет со скоростью работы памяти(раза в 3-4 медленнее, чем могло бы)?надо проверить. По идее, не сильно медленнее должно быть, что стек, что куча? В случае с кучей просто ещё одна операция разыменования (а я обычно в начале цикла сразу беру указатель с итератора и работаю уже с ним), и всё упирается в то, как мы работаем с объектом. Ну, идеального решения на все случаи в плюсах нету. Если вектор часто переносится - выгоднее, видимо, держать указатели. Если нет - объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 05:14 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbalex_kну а сами объекты размещаются на куче черти где, и последовательный перебор будет со скоростью работы памяти(раза в 3-4 медленнее, чем могло бы)?надо проверить. По идее, не сильно медленнее должно быть, что стек, что куча? В случае с кучей просто ещё одна операция разыменования (а я обычно в начале цикла сразу беру указатель с итератора и работаю уже с ним), и всё упирается в то, как мы работаем с объектом. Ну, идеального решения на все случаи в плюсах нету. Если вектор часто переносится - выгоднее, видимо, держать указатели. Если нет - объекты. Тут, наверное, имелся в виду перенос данных в кэши процессора, когда ты последовательно обращаешься к непрерывному куску памяти, что намного ускоряет выполнение кода. А когда данные по памяти разбросаны по указателям, то прироста скорости не жди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 12:08 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
NekZА когда данные по памяти разбросаны по указателям, то прироста скорости не жди.в случае, когда вектор шибко динамический, без указателей, но с большими объектами, то прирост скорости может и быть за счёт переноса только указателей, а не объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 05:27 |
|
||
|
Помогите не понимаю
|
|||
|---|---|---|---|
|
#18+
CEMbNekZА когда данные по памяти разбросаны по указателям, то прироста скорости не жди.в случае, когда вектор шибко динамический, без указателей, но с большими объектами, то прирост скорости может и быть за счёт переноса только указателей, а не объектов. Это очень тонкий трейд-оф ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 17:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2017868]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 425ms |

| 0 / 0 |
