miért zabálom a memóriát?

Kezdőlap Fórumok Programozás miért zabálom a memóriát?

10 bejegyzés megtekintése - 1-10 / 22
  • Szerző
    Bejegyzés
  • #2088780
    tovis
    Felhasználó

      Most leállítottam mind a négy programot – a buffered és cached nem változott!?

      #2088781
      kisbetu
      Felhasználó
        tovis wrote:
        a buffered és cached nem változott!?

        Mondod! vagy kérdezed?

        #2088782
        tovis
        Felhasználó

          Állítom és nem értem!

          #2088783
          pointux
          Felhasználó

            Ennyire éhes vagy?
            Most kipróbáltam egy régi sd-ramon, de pocsék! :))))

            „fájlba nyomom – amolyan log fájl”, „9600 Baud -on /dev/ttySx”
            Innentől magyarázni kell, hogy mért nő a lemez-gyorsító, meg egyéb tárad?
            Majd, ha elfogy a memória nem nő tovább.
            Ha újabb programnak kell a hely, akkor majd csökkenni fog.
            Ha meg már nem lesz gyorstár a memóriában, csak program, akkor valamelyik meg ki lesz lőve. :))))

            #2088784
            tovis
            Felhasználó

              Közben az LQ -n felhívták figyelmemet hogy ennek így kell működnie, mivel a Linux kernel (a windows -al ellentétben) sokat cachel és bufferel, így gyorsítván a működést, ráadásul ezeket a buffereket sokáig nem szabadítja fel, csak ha muszáj. Ráadásul a cache arányt be lehet állítani:
                #echo 30 > /proc/sys/vm/swappiness
              ha jól idézem. A szám 0 … 100 ig tejedhet, a nullánáél mindent swappel a 100 meg mindent lefoglal cache -nek.
              Szóval nincs hiba sem az én programocskáimban, sem a kernellel nincs semmi baj – így kell működnie;o)

              #2088785
              oldalborda
              Felhasználó

                Azért még lehet olyan disznóság is hogy a programodban rendszeresen lefoglalsz és később fölszabadítasz egy kis memóriaterületet, de a fölszabadítás néha-néha elmarad. Ezt nevezik memóriaszivárgásnak. Oka egyértelműen programozási hiba. Egyszer én is jártam így egy démonként futó programmal. Egy ideig néztem a forráskódot mire megtaláltam a hibát.

                #2088786
                tovis
                Felhasználó

                  A programocskáim fő tulajdonsága, hogy nem foglal dinamikusan memóriát, az elején – setup/init részeként foglalok némi memóriát – azután már csak stacket használok végig!
                  Öreg róka vagyok – akkor programoztam DOS -t windows -t maikor még a dinamikus nmemória foglalás nem volt klorrekt. Az NT4.0 és csatlós nem profi rendszerek mint a win9x folyamatosan, operációs rendszer szinten el’szták az erőforrás kezelést! – nem csak a memóriát.

                  #2088787
                  lacix
                  Felhasználó

                    Hello!

                    Nekem is van egy memóriás kérdésem. (Más jellegű, de talán elfér itt.)

                    Az alábbi két kis programvázlat gcc-ben ekvivalens?

                    void fgv_1(Típus *x);
                    Típus* fgv_2();
                    void típus_felszabadít(Típus *x);

                    1.
                    fgv_1( fgv_2() );

                    2.
                    Típus *x = fgv_2();
                    fgv_1(x);
                    típus_felszabadít(x);

                    Tehát, ha fgv_1 argumentumában megadok egy fgv_2-t, ami létrehoz vmit a memóriában, akkor az ami létrejött az fgv_1 lefutása után autamatikusan felszabadul?
                    A 2. megoldás természetesen jól működik, csak az sokkal kényelmetlenebb.

                    Üdv.
                    L a c i

                    #2088788
                    pointux
                    Felhasználó

                      fgv_1( fgv_2() );

                      Típus *x = fgv_2();
                      fgv_1(x);

                      Ez ugye annyiban különbözik, hogy a 2. 32 bittel több helyet foglal.
                      (De ezek, csak címeknek az átadásai, tehát nincs mit felszabadítani. Az eredeti függvényed, viszont statikus, tehát nem fog felszabadulni.)

                      #2088789
                      lacix
                      Felhasználó

                        Az ok, hogy csak címek átadása történik, de a Típus* fgv_2() létrehoz dinamikusan pl. malloc-kal egy Típus struktúrát és azt adja vissza. Az nem viláogos, hogy ha így használom:
                        fgv_1( fgv_2() )
                        akkor a fgv_2() által foglalt terület fel fog-e szabadulni.

                      10 bejegyzés megtekintése - 1-10 / 22
                      • Be kell jelentkezni a hozzászóláshoz.