eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Automatic Reference Counting
Ilość wypowiedzi w tym wątku: 47

  • 1. Data: 2017-08-14 01:17:26
    Temat: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    Języki Objective-C i Swift polegają na zliczaniu referencji. Jakie są
    sposoby radzenia sobie z pętlami?


  • 2. Data: 2017-08-14 01:35:20
    Temat: Re: Automatic Reference Counting
    Od: "M.M." <m...@g...com>

    On Monday, August 14, 2017 at 1:17:27 AM UTC+2, Borneq wrote:
    > Języki Objective-C i Swift polegają na zliczaniu referencji. Jakie są
    > sposoby radzenia sobie z pętlami?

    Nie znam konkretnie tego zagadnienia, ale w ogóle kojarzy mi się z
    teorią grafów, coś w stylu: oznacz wierzchołek jako odwiedzony.

    Pozdrawiam
    P.S.
    Rozumiem, że chodzi o X wskazuje na Y, a Y wskazuje na Z.


  • 3. Data: 2017-08-14 02:40:04
    Temat: Re: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    W dniu 14.08.2017 o 01:35, M.M. pisze:
    > On Monday, August 14, 2017 at 1:17:27 AM UTC+2, Borneq wrote:
    >> Języki Objective-C i Swift polegają na zliczaniu referencji. Jakie są
    >> sposoby radzenia sobie z pętlami?
    >
    > Nie znam konkretnie tego zagadnienia, ale w ogóle kojarzy mi się z
    > teorią grafów, coś w stylu: oznacz wierzchołek jako odwiedzony.

    Co takiego jak weak_ptr które są również w C++.
    Jak zrobione są shared_ptr i weak_ptr w C++?
    Czy shared_ptr to obiekt a nie wskaźnik na obiekt, który ma pole
    - goły wskaźnik
    - wskaźnik na blok kontrolny - tutaj dodatkowy malloc?
    Blok kontrolny to licznik referencji.
    To jeszcze proste ale jak jest z weak:
    Blok kontrolny to licznik referencji + drugi licznik.
    Jak debugowałem shared_ptr to ma on w bloku kontrolnym _Uses i _Weaks -
    po to by łatwiej było go konwertować na weak?
    Bo konwersja jest konieczna. Czy shared ma oba liczniki, tylko jednego
    nie wykorzystuje?
    Jakie reguły zwalniania weak?
    Tu jest przykład:
    https://www.codeproject.com/Articles/541067/Cplusplu
    s-Smart-Pointers
    ale chciałem się dowiedzieć więcej


  • 4. Data: 2017-08-14 10:03:31
    Temat: Re: Automatic Reference Counting
    Od: "M.M." <m...@g...com>

    On Monday, August 14, 2017 at 2:40:04 AM UTC+2, Borneq wrote:
    > W dniu 14.08.2017 o 01:35, M.M. pisze:
    > > On Monday, August 14, 2017 at 1:17:27 AM UTC+2, Borneq wrote:
    > >> Języki Objective-C i Swift polegają na zliczaniu referencji. Jakie są
    > >> sposoby radzenia sobie z pętlami?
    > >
    > > Nie znam konkretnie tego zagadnienia, ale w ogóle kojarzy mi się z
    > > teorią grafów, coś w stylu: oznacz wierzchołek jako odwiedzony.
    >
    > Co takiego jak weak_ptr które są również w C++.
    > Jak zrobione są shared_ptr i weak_ptr w C++?
    > Czy shared_ptr to obiekt a nie wskaźnik na obiekt, który ma pole
    > - goły wskaźnik
    > - wskaźnik na blok kontrolny - tutaj dodatkowy malloc?
    > Blok kontrolny to licznik referencji.
    > To jeszcze proste ale jak jest z weak:
    > Blok kontrolny to licznik referencji + drugi licznik.
    > Jak debugowałem shared_ptr to ma on w bloku kontrolnym _Uses i _Weaks -
    > po to by łatwiej było go konwertować na weak?
    > Bo konwersja jest konieczna. Czy shared ma oba liczniki, tylko jednego
    > nie wykorzystuje?
    > Jakie reguły zwalniania weak?
    > Tu jest przykład:
    > https://www.codeproject.com/Articles/541067/Cplusplu
    s-Smart-Pointers
    > ale chciałem się dowiedzieć więcej

    Ja mam inne pytanie, czy warto tego używać i dlaczego?
    Pozdrawiam


  • 5. Data: 2017-08-14 10:14:59
    Temat: Re: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    W dniu 14.08.2017 o 10:03, M.M. pisze:
    > Ja mam inne pytanie, czy warto tego używać i dlaczego?

    Warto, kompilator się sam martwi o zwolnienie pamięci. Pytanie - jak to
    jest od środka robione.


  • 6. Data: 2017-08-14 10:31:45
    Temat: Re: Automatic Reference Counting
    Od: "M.M." <m...@g...com>

    On Monday, August 14, 2017 at 10:14:58 AM UTC+2, Borneq wrote:
    > W dniu 14.08.2017 o 10:03, M.M. pisze:
    > > Ja mam inne pytanie, czy warto tego używać i dlaczego?
    >
    > Warto, kompilator się sam martwi o zwolnienie pamięci. Pytanie - jak to
    > jest od środka robione.

    Widzę że coś jak QMutexLocekr w Qt, tylko że mutex locker samo
    odblokowuje mutex a nie zwalnia pamięć :)
    http://doc.qt.io/qt-4.8/qmutexlocker.html

    Bardzo rzadko używam malloc i new. Gdy muszę parę linijek wpisać aby
    zwolnić pamięć, to korona z głowy mi nie spadnie. Procedury staram się
    pisać w ten sposób, aby był jeden punkt wyjścia, więc wszelkie
    zwalnianie zasobów łatwiej ogarnąć, bo są zamieszczone zbiorczo na
    końcu.

    Jak to jest robione od środka... nie znam pełnej funkcjonalności,
    trudno powiedzieć. Na pewno w destruktorze zwalnia pamięć - ale
    myślę że to wiesz. Więc co pytasz? Dlaczego pytasz?

    Jeśli w pierwszy poście pętlami nazwałeś cykle w grafie, to rozwiązuje
    się to przez oznaczenie wierzchołka grafu jako oznaczony - tak jak
    pisałem, ale nie odpowiedziałeś czy o to chodziło, czy zrozumiałeś, itd.

    Pozdrawiam






  • 7. Data: 2017-08-14 15:10:41
    Temat: Re: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    W dniu 14.08.2017 o 10:31, M.M. pisze:
    > Widzę że coś jak QMutexLocekr w Qt, tylko że mutex locker samo
    > odblokowuje mutex a nie zwalnia pamięć :)
    > http://doc.qt.io/qt-4.8/qmutexlocker.html

    W poniższym przykładzie listy cyklicznej jest coś źle.
    Shared nie powinien zwalniać, a zwalnia wszystkie z wyjątkiem jednego i
    to przed opuszczeniem test(),
    zamiana na weak skutkuje tym że jest na zmianę tworzenie i zaraz
    zwalnianie. Coś nie tak, jak w teorii.

    #include <memory>
    #include <iostream>
    using namespace std;

    class Node
    {
    private:
    int n;
    public:
    Node(int n): n(n)
    {
    cout << "Constructor Node is called " << n <<endl;
    }
    ~Node()
    {
    cout << "Destructor Node is called " << n << endl;
    }
    shared_ptr<Node> prev;
    };



    int test()
    {
    shared_ptr<Node> node = shared_ptr<Node>(new Node(0));
    shared_ptr<Node> first = node;
    for (int i = 1; i < 5; i++)
    {
    shared_ptr<Node> prev = node;
    node = shared_ptr<Node>(new Node(i));
    node->prev = prev;
    }
    node->prev = node;
    printf("====\n");
    return 0;
    }

    int main()
    {
    test();
    return 0;
    }


  • 8. Data: 2017-08-14 15:17:14
    Temat: Re: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    W dniu 14.08.2017 o 15:10, Borneq pisze:
    > shared_ptr<Node> first = node;
    > node->prev = node; <---error

    zaraz zaraz, powinno być first->prev = node;nawet zmienna jest first
    teraz nie zwalnia wcale i jest ok.


  • 9. Data: 2017-08-14 15:26:58
    Temat: Re: Automatic Reference Counting
    Od: Borneq <b...@a...hidden.pl>

    W dniu 14.08.2017 o 15:10, Borneq pisze:
    > shared_ptr<Node> prev;

    zamiana na weak_ptr<Node> prev;
    skutkuje:
    Constructor Node is called 0
    Constructor Node is called 1
    Constructor Node is called 2
    Destructor Node is called 1
    Constructor Node is called 3
    Destructor Node is called 2
    Constructor Node is called 4
    Destructor Node is called 3
    ====
    Destructor Node is called 0
    Destructor Node is called 4

    Żle bo wszystkie destructory powinny być wołane po kresce, za szybko
    teraz zwalnia.
    ---
    shared_ptr<Node> prev;
    weak_ptr<Node> weakprev;

    first->weakprev = node;

    Teraz ok, czyli najgłębszy wskazujący ten na szczycie powinien być tylko
    weak.


  • 10. Data: 2017-08-14 15:36:19
    Temat: Re: Automatic Reference Counting
    Od: "M.M." <m...@g...com>

    On Monday, August 14, 2017 at 3:10:41 PM UTC+2, Borneq wrote:
    > W dniu 14.08.2017 o 10:31, M.M. pisze:
    > > Widzę że coś jak QMutexLocekr w Qt, tylko że mutex locker samo
    > > odblokowuje mutex a nie zwalnia pamięć :)
    > > http://doc.qt.io/qt-4.8/qmutexlocker.html
    >
    > W poniższym przykładzie listy cyklicznej jest coś źle.
    > Shared nie powinien zwalniać, a zwalnia wszystkie z wyjątkiem jednego i
    > to przed opuszczeniem test(),
    > zamiana na weak skutkuje tym że jest na zmianę tworzenie i zaraz
    > zwalnianie. Coś nie tak, jak w teorii.
    >
    > #include <memory>
    > #include <iostream>
    > using namespace std;
    >
    > class Node
    > {
    > private:
    > int n;
    > public:
    > Node(int n): n(n)
    > {
    > cout << "Constructor Node is called " << n <<endl;
    > }
    > ~Node()
    > {
    > cout << "Destructor Node is called " << n << endl;
    > }
    > shared_ptr<Node> prev;
    > };
    >
    >
    >
    > int test()
    > {
    > shared_ptr<Node> node = shared_ptr<Node>(new Node(0));
    > shared_ptr<Node> first = node;
    > for (int i = 1; i < 5; i++)
    > {
    > shared_ptr<Node> prev = node;
    > node = shared_ptr<Node>(new Node(i));
    > node->prev = prev;
    > }
    > node->prev = node;
    Dopiero teraz nie mam wątpliwości, co nazywałeś pętlą w
    pierwszym wątku :)
    > printf("====\n");
    > return 0;
    > }
    >
    > int main()
    > {
    > test();
    > return 0;
    > }

strony : [ 1 ] . 2 ... 5


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: