powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пул на базе unique_ptr
63 сообщений из 63, показаны все 3 страниц
Пул на базе unique_ptr
    #39741519
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте эксперты

Задача - написать свой умный указатель - наследник std::unique_ptr с тем чтоб можно было
при освобождении памяти не удалять, а возвращать ее в пул.

Все работает - однако не получается положить pool_ptr в std::vector - какая та ругань на конструкторы перемещения.

Подскажите плиз - как это правильно делается.

Код: 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.
#include <inttypes.h>
#include <algorithm>
#include <chrono>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <string>
#include <utility>
#include <vector>

struct t {
 public:
  int v;

  ~t() { std::cout << "t->  destructor call" << std::endl; }
};

template <class _Tp, class _Dp = std::default_delete<_Tp>>
class pool_ptr : public std::unique_ptr<_Tp, _Dp> {
 public:
  ~pool_ptr() { this->release(); }
};

std::vector<pool_ptr<t>>* pool;

pool_ptr<t>& getPtr() { return pool->at(0); }

int main() {
  pool = new std::vector<pool_ptr<t>>();
  pool->emplace_back(new pool_ptr<t>());
  getPtr().reset(new t());
  getPtr().get()->v = 10001;
  std::cout << getPtr().get()->v << std::endl;
}




note: copy constructor is implicitly deleted because 'unique_ptr<t, std::__1::default_delete<t> >' has a user-declared move constructor
unique_ptr(unique_ptr&& __u) noexcept
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741521
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.
#include <inttypes.h>
#include <algorithm>
#include <chrono>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <string>
#include <utility>
#include <vector>

struct t {
 public:
  int v;

  ~t() { std::cout << "t->  destructor call" << std::endl; }
};

template <class _Tp, class _Dp = std::default_delete<_Tp>>
class pool_ptr : public std::unique_ptr<_Tp, _Dp> {
 public:
  ~pool_ptr() { this->release(); }
};

std::vector<pool_ptr<t>>* pool;

pool_ptr<t>& getPtr() { return pool->at(0); }

int main() {
  pool = new std::vector<pool_ptr<t>>();
  pool_ptr<t> ptr{};
  pool->emplace_back(std::move(ptr));
  getPtr().reset(new t());
  getPtr().get()->v = 10001;
  std::cout << getPtr().get()->v << std::endl;
}



error: call to implicitly-deleted copy constructor of 'pool_ptr<t, std::__1::default_delete<t> >' ::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);


in instantiation of function template specialization 'std::__1::vector<pool_ptr<t, std::__1::default_delete<t> >, std::__1::allocator<pool_ptr<t, std::__1::default_delete<t> > > >::emplace_back<pool_ptr<t, std::__1::default_delete<t> > >' requested here
pool->emplace_back(std::move(ptr));
^

note: copy constructor of 'pool_ptr<t, std::__1::default_delete<t> >' is implicitly deleted because base class 'std::unique_ptr<t, default_delete<t> >' has a deleted copy constructor
class pool_ptr : public std::unique_ptr<_Tp, _Dp> {
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741534
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЗадача - написать свой умный указатель - наследник std::unique_ptr с тем чтоб можно было
при освобождении памяти не удалять, а возвращать ее в пул.

Для этого не надо писать наследника, достаточно скормить обычному unique_ptr свой аллокатор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741536
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenЗадача - написать свой умный указатель - наследник std::unique_ptr с тем чтоб можно было
при освобождении памяти не удалять, а возвращать ее в пул.

Для этого не надо писать наследника, достаточно скормить обычному unique_ptr свой аллокатор.


Я знаю

Но я вношу изменения в большой проект в котором на простом unique_ptr уже понаписана уйма кода

и менять в шаблоне аллокатор - адовый геморой

Вот решил просто отнаследоваться и переопределить деструктор
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenВот решил просто отнаследоваться и переопределить деструктор

Тогда переопределяй не деструктор, а оператор delete у класса, который пулится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741538
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenВот решил просто отнаследоваться и переопределить деструктор

Тогда переопределяй не деструктор, а оператор delete у класса, который пулится.


А можно поподробнее ? Никогда этого не делал
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
struct  t {
   public:
    int  v;

    ~t() { std::cout <<"t-> destructor call"  << std::endl; }
    void* operator new(size_t size) { return pool.pop(); }
    void operator delete(void *ptr) { pool.push(ptr); }
};



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741548
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
struct  t {
   public:
    int  v;

    ~t() { std::cout <<"t-> destructor call"  << std::endl; }
    void* operator new(size_t size) { return pool.pop(); }
    void operator delete(void *ptr) { pool.push(ptr); }
};





А если пулится char[] ?

И глобально для него делать оператор delete не вариант ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741559
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot semen.s.semen]Здравствуйте эксперты

Задача - написать свой умный указатель - наследник std::unique_ptr с тем чтоб можно было
при освобождении памяти не удалять, а возвращать ее в пул.

Все работает - однако не получается положить pool_ptr в std::vector - какая та ругань на конструкторы перемещения.

Вроде бы для этого не нужен совсем наследник unique_ptr.
unique_ptr сохраняет так называемый делитор, который будет вызван для удаления памяти.
По умолчанию это вызов delete или delete [] в зависимости от типа созданного объекта,
но там может быть любая функция.

Соответственно остаётся только задать эту функцию, а в ней не удалять объект, а помещать в пул памяти.
тАкже надо будет определить operator new, чтобы брать память из пула
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741561
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторю

1) Делетор подменить не получится

unique_ptr  расбросан по тыще мест и везде дилитор я подменить не могу


2) Пулятся char[]
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenА если пулится char[] ?

Пул для chаr[] это стандартный менеджер памяти. Ты не сможешь продублировать его
функциональность в улучшенном варианте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741662
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenerror: call to implicitly-deleted copy constructor of 'pool_ptr<t, std::__1::default_delete<t> >' ::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);

Добавьте еще эти конструкторы, чтобы реализовать move-семантику (copy-семантика не поддерживается в базовом unique_prt, поэтому ее нет смысла пытаться делать).
Код: plaintext
1.
2.
   pool_ptr() = default;
   pool_ptr(pool_ptr&&) = default;
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741664
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя как выше сказали, наследование здесь не нужно.

Вот то же самое как правильно )))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
template<typename T>
struct PoolDeleter {
    void operator()(T* ptr)
    {
       // return to pool
    }
};

template<typename T>
using pool_ptr = std::unique_ptr<T, PoolDeleter<T>>;
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741668
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyнаследование здесь не нужно.

Ну вот, лишил ТСа часов отладки и биения головой об стену...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741746
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenА если пулится char[] ?

Пул для chаr[] это стандартный менеджер памяти. Ты не сможешь продублировать его
функциональность в улучшенном варианте.


У нас страшно течет RSS хотя утечек Valgrind не показывает

Хочу вместе аллокации - деаллокации испольщовать пул чар-массивов

Это будет лучше чем то что сейчас
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741747
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskysemen.s.semenerror: call to implicitly-deleted copy constructor of 'pool_ptr<t, std::__1::default_delete<t> >' ::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);

Добавьте еще эти конструкторы, чтобы реализовать move-семантику (copy-семантика не поддерживается в базовом unique_prt, поэтому ее нет смысла пытаться делать).
Код: plaintext
1.
2.
   pool_ptr() = default;
   pool_ptr(pool_ptr&&) = default;



А почему move конструкторы не отнаследовались от  std::unique_ptr ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741748
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenУ нас страшно течет RSS хотя утечек Valgrind не показывает
Хочу вместе аллокации - деаллокации испольщовать пул чар-массивов

Значит у вас копятся не освобождённые ресурсы. Пул тут не поможет, только отладка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741749
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenУ нас страшно течет RSS хотя утечек Valgrind не показывает
Хочу вместе аллокации - деаллокации испольщовать пул чар-массивов

Значит у вас копятся не освобождённые ресурсы. Пул тут не поможет, только отладка.


Вот тут пишут что необязательно

https://stackoverflow.com/questions/23077525/resident-memory-increase-while-valgrind-not-showing-any-leaks

И пулирование как раз спасает от такого

Монитор памяти показывает что у нас очень часто аллоцируется - освобождается пара мелких буферов по 8кб

При стресс тестирование суммарно капает под несколько гигов - хотя реально там меньше мегабайта надо

Хочу облегчить операционке жизнь и посмотреть будет ли после этого течь RSS
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741755
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenА почему move конструкторы не отнаследовались от  std::unique_ptr ?

https://en.cppreference.com/w/cpp/language/move_constructor
авторImplicitly-declared move constructor

If no user-defined move constructors are provided for a class type (struct, class, or union), and all of the following is true:
- there are no user-declared copy constructors;
- there are no user-declared copy assignment operators;
- there are no user-declared move assignment operators;
- there are no user-declared destructors;
- the implicitly-declared move constructor is not defined as deleted due to conditions detailed in the next section

then the compiler will declare a move constructor as a non-explicit inline public member of its class with the signature T::T(T&&).

У вас деструктор объявлен, поэтому неявного move- не было.
А наследование тут не причем.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741757
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskysemen.s.semenА почему move конструкторы не отнаследовались от  std::unique_ptr ?

https://en.cppreference.com/w/cpp/language/move_constructor
авторImplicitly-declared move constructor

If no user-defined move constructors are provided for a class type (struct, class, or union), and all of the following is true:
- there are no user-declared copy constructors;
- there are no user-declared copy assignment operators;
- there are no user-declared move assignment operators;
- there are no user-declared destructors;
- the implicitly-declared move constructor is not defined as deleted due to conditions detailed in the next section

then the compiler will declare a move constructor as a non-explicit inline public member of its class with the signature T::T(T&&).

У вас деструктор объявлен, поэтому неявного move- не было.
А наследование тут не причем.

Спасибо - теперь ясно
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741771
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenВот тут пишут что необязательно

SO, конечно, хороший ресурс, но даже там попадаются странные ответы. Особенно на странные
вопросы. Если valgring не показывает тебе утечку, то вариантов два:
1. Память не потеряна, она по-прежнему где-то внутри твоей программы отслеживается. В этом
случае поможет только долгая и тщательная отладка.
2. Ты как-то неправильно им пользуешься.

Первый случай гораздо вероятнее. Так что включай мозг и начинай анализировать свою программу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741773
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenВот тут пишут что необязательно

SO, конечно, хороший ресурс, но даже там попадаются странные ответы. Особенно на странные
вопросы. Если valgring не показывает тебе утечку, то вариантов два:
1. Память не потеряна, она по-прежнему где-то внутри твоей программы отслеживается. В этом
случае поможет только долгая и тщательная отладка.
2. Ты как-то неправильно им пользуешься.

Первый случай гораздо вероятнее. Так что включай мозг и начинай анализировать свою программу.


Программа не моя

Это внешний   OpenSource продукт - очередное Г

Пулирование - это просто способ проверить поведение если убрать эту аллокацию - деаллокацию.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741774
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov1. Память не потеряна, она по-прежнему где-то внутри твоей программы отслеживается. В этом
случае поможет только долгая и тщательная отладка.


Ага еще скажи - бага в мониторе памяти.

Ясно вижу что аллоцируемая память - освобождается.

А вот почему при это RSS растет - есть тайна превеликая
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741775
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The heap is part of your "res" memory, so if you have something that allocates x MB of heap memory, then releases it, unless the OS actually need that memory for other purposes, it will remain as part of your applications memory. (Actually, it's quite a bit more complex than that, but for this discussion, this picture is valid).
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741781
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не отменял фрагментацию кучи, при которой память растет, а утечки нет.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741783
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНикто не отменял фрагментацию кучи, при которой память растет, а утечки нет.

Вот вот

Поэтому и родилась идея посмотреть как ведет себя  RSS если два участка памяти активно аллоцирующие char[] и кладущие его в std::unique_ptr заменить пулированием.

Думаю что это и производительность может поднять.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741784
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема тока в том что там этот  unique_ptr из данного класса передается еще в 1000 мест и просто подменить Deleter не вариант
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741786
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПулирование - это просто способ проверить поведение если убрать эту аллокацию - деаллокацию.

Как я уже сказал выше: пул автоматически ведёт стандартный менеджер памяти. Твои пляски с
бубном просто повторят его действия, но ничего не изменят.

Инструменты в том топике, кстати, неплохие подсказали. Но они тоже вряд ли помогут. Так
что придётся-таки ручками и головой понимать почему в россии не делают опенсорса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741787
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКак я уже сказал выше: пул автоматически ведёт стандартный менеджер памяти. Твои пляски с
бубном просто повторят его действия, но ничего не изменят.


Это не так

Отдавать в конкретную точку заранее преаллоцированные char[] или брать их из хипа - это 2 разные вещи


Dimitry SibiryakovТак что придётся-таки ручками и головой понимать почему в россии не делают опенсорса.


Завязывай хамить.

Я с тобой тут предельно уважительно общаюсь - но могу и по другому - боюсь правда опять забанят.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741801
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenОтдавать в конкретную точку заранее преаллоцированные char[] или брать их из хипа - это 2
разные вещи

Одинаковые. В хипе точно такие же цепочки "преаллоцированных char[]" из которых ММ
выбирает самую подходящую.

Я бы на твоём месте натравил на программу DrMemory, подождал пока она отъест память и
сбросил полный дамп выделенных блоков. Портянка будет километрового размера, но за пару
дней ты наверняка выяснишь с точностью до строчки кода где выделяется лишняя память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741818
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenОтдавать в конкретную точку заранее преаллоцированные char[] или брать их из хипа - это 2
разные вещи

Одинаковые. В хипе точно такие же цепочки "преаллоцированных char[]" из которых ММ
выбирает самую подходящую.

Я бы на твоём месте натравил на программу DrMemory, подождал пока она отъест память и
сбросил полный дамп выделенных блоков. Портянка будет километрового размера, но за пару
дней ты наверняка выяснишь с точностью до строчки кода где выделяется лишняя память.


Для начала посмотрим как оно себя поведет с пулированием

Монитор памяти должен будет показать кто аллоцирует память теперь

Две данные точки ее больше аллоцировать не будут и в топ всплывет кто то еще


Не может РСС с такой скоростью рести без достаточно больших аллокаций

А большией аллокации как показывает монитор памяти возникают в этих 2 точках.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39741860
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПовторю

1) Делетор подменить не получится

unique_ptr  расбросан по тыще мест и везде дилитор я подменить не могу


2) Пулятся char[]

Код по-любому надо перекомпилировать.
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39742191
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jemalloc попробуй
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39743833
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guestjemalloc попробуй

Попробывал

export MALLOC_CONF=prof:true,lg_prof_interval:1,lg_prof_sample:17,prof_final:true,prof_prefix:/repos/jprof
export LD_PRELOAD=/usr/local/Cellar/jemalloc/5.1.0/lib/libjemalloc.dylib ./my_programm

ожидаю

<jemalloc>: Leak summary: 267184 bytes, 473 objects, 20 contexts
<jemalloc>: Run jeprof on "jeprof.19678.0.f.heap" for leak detail


однако ничего нет

вызов je_malloc_stats_print из С кода работает и печатает что оно  jemalloc


может кто знает почему не создается .heap  файл ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39743840
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenможет кто знает почему не создается .heap  файл ?

Наиболее вероятные причины:
1) Он создаётся не там, где ты думаешь;
2) На место, где он пытается создаться, у тебя нет прав.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39743845
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenможет кто знает почему не создается .heap  файл ?

Наиболее вероятные причины:
1) Он создаётся не там, где ты думаешь;
2) На место, где он пытается создаться, у тебя нет прав.


А как задать путь ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39743847
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sudo my_programm  не помог


<jemalloc>: Leak summary: 267184 bytes, 473 objects, 20 contexts
<jemalloc>: Run jeprof on "jeprof.19678.0.f.heap" for leak detail

в out не вижу

тут что то другое
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39745636
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи эксперты - я это сделал

Однако в результирущем  pdf вместо имен методов - адреса

добавил --add_lib=

все равно адреса

подскажите плиз как заставить в итоговом репорте печаться имена методов
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39745664
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenподскажите плиз как заставить в итоговом репорте печаться имена методов

Собирать с отладочной информацией нужного формата.

А можно пойти другим путём: при сборке сгенерировать map-файл и по нему к адресам искать
имена.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39745670
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenподскажите плиз как заставить в итоговом репорте печаться имена методов

Собирать с отладочной информацией нужного формата.

А можно пойти другим путём: при сборке сгенерировать map-файл и по нему к адресам искать
имена.


Подскажите - а какие ключики нужны для сборки ?

и как генерировать map-файл ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39745700
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

ld ... -M
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39745949
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Wl,-Map=output.map

Добавил в опцию линкера в мап файл - не работает
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746027
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenДобавил в опцию линкера в мап файл - не работает

Теперь надо запустить линкер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746030
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenДобавил в опцию линкера в мап файл - не работает

Теперь надо запустить линкер.


Говорю же в MakeFile добавляю

EXTRA_LDFLAGS = "-Xlinker -assert -Xlinker -Map=output.map"


Все как тут написали https://stackoverflow.com/questions/7221141/any-difference-between-wl-option-and-xlinker-option-syntax-for-gcc

не работает
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746032
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenне работает

Что "не работает"? Файл output.map не создаётся или какую вообще "работу" ты ожидаешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746033
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,


Да output.map не создается

Я указываю у себя точный абсолютный путь

/folder/output.map
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746046
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenДа output.map не создается

После изменения MakeFile ты запускал make?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746050
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenДа output.map не создается

После изменения MakeFile ты запускал make?


Открываю man ld

-map map_file_path
Writes a map file to the specified path which details all symbols and their addresses in the output image.

Добавляю в конфиги

-Wl,-map /folder/out.map

Запускаю

Makefile:177: Warning: /folder/out.map dont exist
Makefile:177: Warning: /folder/out.map dont exist
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746075
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen-map map_file_path
Writes a map file to the specified path which details all symbols and their addresses in
the output image.

Это какой ld? У обычного GNU такой опции нет. Если твой линкер хочет "path", так и давай
ему путь. Без названия файла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746138
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semen-map map_file_path
Writes a map file to the specified path which details all symbols and their addresses in
the output image.

Это какой ld? У обычного GNU такой опции нет. Если твой линкер хочет "path", так и давай
ему путь. Без названия файла.


Это MacOs

ld(1) BSD General Commands Manual ld(1)

NAME
ld -- linker

SYNOPSIS
ld files... [options] [-o outputfile]

DESCRIPTION
The ld command combines several object files and libraries, resolves references, and produces an ouput file. ld can produce a final linked image (executable, dylib, or bundle), or with the -r option, produce another object file. If the
-o option is not used, the output file produced is named "a.out".

Darwin March 7, 2011 Darwin
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746263
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такс

LIBOBJECTS = $(LIB_SOURCES:.cc=.o)

LIB_SOURCES это список cpp-шке

Подскажите как вывести на экран g++  команду - которая генерирует объектный файл

.a собирается командой ar
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746271
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно я понимаю что при сборке .a статической либы линке не вызывается вообще ?

А вызывается он при сборке финального исполняемого бинарника ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746281
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПравильно я понимаю что при сборке .a статической либы линке не вызывается вообще ?
Статические либы собираются утилитой ar
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746284
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПодскажите как вывести на экран g++  команду - которая генерирует объектный файл

Обычно задаются обратным вопросом: "как при сборке спрятать команды, запускаемые make".
Без дополнительных ухищрений они как раз вываливаются на экран при сборке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746302
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenподскажите плиз как заставить в итоговом репорте печаться имена методов

Собирать с отладочной информацией нужного формата.

А можно пойти другим путём: при сборке сгенерировать map-файл и по нему к адресам искать
имена.


Так map-файл собрал

Подскажите пожалуйста - а как собирать с отладочной информацией нужного формата ?

То есть чтобы jeprof автоматически бы генерировал pdf-ку с именами методов а не адресами
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746322
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПодскажите пожалуйста - а как собирать с отладочной информацией нужного формата ?
То есть чтобы jeprof автоматически бы генерировал pdf-ку с именами методов а не адресами

Подсказки в документации к этому jeprof-у, о котором лично я первый раз слышу, ты уже искал?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746323
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenПодскажите пожалуйста - а как собирать с отладочной информацией нужного формата ?
То есть чтобы jeprof автоматически бы генерировал pdf-ку с именами методов а не адресами

Подсказки в документации к этому jeprof-у, о котором лично я первый раз слышу, ты уже искал?..


https://github.com/jemalloc/jemalloc/wiki/Use-Case:-Leak-Checking

искал

пришлось в сишный код jemalloc лесть
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746700
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдаю странную картину

Адреса которые сдампились в отчет не находятся в map файле линкера

Что не так ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746709
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЧто не так ?

Вероятнее всего - или они из другого модуля или ты не учитываешь релокацию на другой
базовый адрес.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746711
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, конечно, ещё возможен самый тупой вариант, что ты ищешь на полное совпадение адреса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746713
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenЧто не так ?

Вероятнее всего - или они из другого модуля или ты не учитываешь релокацию на другой
базовый адрес.


А как найти правильный модуль ?

И как правильно искать по адресам ?
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39746962
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался

вот тут описано как https://github.com/google/pprof/issues/130
...
Рейтинг: 0 / 0
Пул на базе unique_ptr
    #39756008
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov...

Вот здесь точно описана моя проблема.

http://codearcana.com/posts/2016/07/11/arena-leak-in-glibc.html

Отсюда следует что пул на базе char * это отличная идея - поскольку предотвращает утечку в аренах.

Переход на JeMalloc другая отличная идея.

Также отсюда следует что фраза "Включи мозг безмозглый Семен - char * не пулируют" было пустым эмоциональным флудом.
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пул на базе unique_ptr
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]