Muistin varaus/vapatus

ylemmän kielen osaaja

Osaisiko joku kertoa kuinka assyn tasolla voi varata muistia enemmän normaalin perustyypin verran, entä vapauttaminen ja onko null sama kuin kirjoittaisi muistin osoitteeksi 0:n. Olen ihan pihalla, noista, linkkikin käy, englanti on hyvin hallussa...

6

1592

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Samalla tavalla kuin ylemmällä kielellä, eli kutsut rajapinnan muistinvarausta (joku malloc).

      Jos ohjelmoit suoraan raudan päälle niin sitten sinun pitäisi koodata muistinhallinta.

    • ITiootti

      Pinossa on muutama kilotavu tilaa, sitä voi käyttää push/pop -käskyillä ja pino-osoitinta muuttamalla.

      esim. C-kääntäjä ehkä käyttää pinoa seuraavalla tavalla

      int f(){
      char a[50];//tässä kohdassa laitetaan pino-osoitin talteen ja lisätään pino-osoitinta 100 tai 200
      char aa[50]={0};//vanhapinosoitin toimii referenssinä, eli tapahtuu jtn. vastaavaa: memzero( vanhapinoosoitin 50, 50);

      {//kääntäjän optimoinnista riippuu mitä tapahtuu voi jopa käyttää aa a tilaa jos niitä käytetään vain ennen tätä
      byte b[100];
      }//pinosta ehkä vapautetaan 100 tavua

      int k=5;//voidaan työntää push-komennolla pinoon
      int l;//menee varmaan suoraan rekisteriin
      if(l)k=0;

      //ennen return käskyä pino-osoitin palautetaan
      return k 5;
      }
      //funktionkutsun jälkeen joku härski koodari voi yrittää lukea funktion sisäisiä arvoja
      //esim. k saattaa löytyä osoitteesta pinoOsoitin[8 100]



      C-ohjelmoinnissa on suositeltu esitellä käytettävät muuttujat funktion alussa näin kääntäjä voi helposti yhdellä kertaa varata tilan kaikille.
      Nykyiset C/C kääntäjät osaa varmaan paremmin optimoida pinon käyttöä ja tuo vanha malli saattaa nykyään jopa hidastaa ohjelmaa.


      Pinon käyttö on tuhansia kertoja nopeampaa kuin satunnaisen RAM osoitteen käyttö ja muistin varaaminen jollain malloc:lla miljoonia kertoja hitaampaa, mutta vaikka jokaisen int:n varaa mallocilla niin ei todennäköisesti pääse yhtä huonoon suorituskykyyn kuin esim. Javalla.
      ASMilla taas pääsee hyvinkin helposti huonompaan suorituskykyyn kuin C:llä.

      • korjauksia

        Pinossa on nykyisin useimmiten 1 MB tai jopa 'rajaton' määrä tilaa, riippuu tosin käyttöjärjestelmästä. Aina kun pinon huippu saavutetaan, systeemi varaa muistia normaaliin tapaan. Pinon käyttö ei ole tuhansia kertoja nopeampaa kuin minkään muun muistialueen käyttö, mallocin nopeus riippuu aivan toteutuksesta, yksinkertaisimmillaan se voi viedä ihan muutaman kellojakson. Ainoa millä on väliä on onko osoiteen sisältö L1 cachessa vai ei. Jos ei ole myöskään L2/L3, joutuu prosessori noutamaan tyypillisesti 64 tavua täyttääkseen cache-linen... ja tässä voi tietysti kulua melkoinen määrä kellojaksoja, tuhansia helposti.

        Asiasta toiseen. Yhden asian voin kyllä taata: jos Javalla varaat 10 miljoonaa objektia ja vertaat 10 miljoonaa malloc(16), Java voittaa ylivoimaisesti. Jos et usko, kokeile... Toinen mikä voi yllättää on int a, i; for(i=0; i


    • Delete program ? (Y)

      Ei konekieltä käytettäessä varsinaisesti varata mitään muistia. Oletuksena on, että silloin voi osoittaa rajoituksetta mihin tahansa muistiosoitteeseen mitä hardware tukee. Jos yrität lukea tai kirjoittaa muistialueeseen jota ei ole olemassa, syntyy luonnollisesti virhetilanne. Muistivaraukset tulevat vasta käyttöjärjestelmän myötä, jolloin halutaan pitää kirjaa mitä osaa muistista mikäkin ohjelma käpistelee ja välttää siten törmäykset eri ohjelmien suoritusten välillä.

      Perusohjelmathan saavat käyttöjärjestelmiltä kehyksen, jossa niille annetaan jokin siivu muistia sen lisäksi mitä ne itse kuluttavat ladattuna muistiin. Loput on niiden sitten pyydettävä muistinvarauskäskyillä käyttöjärjestelmältä. Jos kääntäjä on niin korkealentoinen, että tarjoaa jotain muistinkäsittelykäskyjä se ei oikeastaan ole enää assembler vaan enemmän korkeamman kielen kääntäjä.

      Käsite null vaihtelee käyttöjärjestelmästä ja ohjelmointikielestä toiseen. Joissakin se on lukuna nolla ja joissakin jotain muuta. Se on enemmän symboli kuin varsinainen luku tai osoite.

      • 13+13=26

        "Ei konekieltä käytettäessä varsinaisesti varata mitään muistia. "

        MC680x0 käskyt LINK ja UNLK. Tuo menee melkosen lähelle muistin varausta, vaikka pinoon varataankin.

        LINK A0,#-100 ; "varataan" 100 tavua muistia
        LINK A1,#-500 ; "varataan" 500 tavua muistia

        UNLK A0 ; "vapautetaan" kaikki

        Jos tuo ei kelpaa, on esim. uudessa Azulin Vega-prosessorissa hardware-pohjainen muistinhallinta (garbage collection-tyyppinen).


      • Delete program ? (Y)
        13+13=26 kirjoitti:

        "Ei konekieltä käytettäessä varsinaisesti varata mitään muistia. "

        MC680x0 käskyt LINK ja UNLK. Tuo menee melkosen lähelle muistin varausta, vaikka pinoon varataankin.

        LINK A0,#-100 ; "varataan" 100 tavua muistia
        LINK A1,#-500 ; "varataan" 500 tavua muistia

        UNLK A0 ; "vapautetaan" kaikki

        Jos tuo ei kelpaa, on esim. uudessa Azulin Vega-prosessorissa hardware-pohjainen muistinhallinta (garbage collection-tyyppinen).

        Annan hieman periksi. Pinonkäsittelykäskyt on pakko myöntää muistin varaamiseksi, koska pinojen kokoja ja asemaa muistissa voidaan säätää halutuksi. Mutta viestissä edellä en tarkoittanut puhua pinosta, joka on omalla tavallaan erikoisalue muistissa.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Olet hirvein ihminen kenet olen tavannut.

      Olet järkyttävä.
      Ikävä
      200
      4383
    2. Kamalaa! Ketä tappoi vanhempansa Huittisissa? Ketkä tapettiin?

      Kamalaa! Ketä tappoi vanhempansa Huittisissa? Ketkä tapettiin? Shokki!
      Huittinen
      42
      2026
    3. Haluan sua ihan vtullisen paljon

      Kokonaan ja seksuaalisesti. Pää räjähtää kohta
      Ikävä
      63
      1713
    4. Ymmärrätköhän nainen

      Etten halua että ottaisit sitä suuhusi. Minusta se on ällöttävää, vaikka kivalta se kai tuntuisi, mutta vain minusta. Mi
      Ikävä
      133
      1373
    5. Martina on käynyt puhumassa viisauksia

      Iltalehden artikkelissa Martinan viisaudet.
      Kotimaiset julkkisjuorut
      358
      1347
    6. Ajattelen sinua iltaisin, aamulla, päivittäin

      Ehkä siinä jo pientä vinkkiä. Oot jäänyt pahasti mieleen. Sun katse on niin syvä ja oot niin lempeä. Hyvä olla sun kanss
      Ihastuminen
      93
      969
    7. SDP:läinen lähettiläs Titta Maja-Luoto RAIVOAA lähetystössä -?

      SDP:n puolueen Maja-Luoto on Portugalissa noussut Median otsikoihin, koska RAIVOAA työntekijöille ja pitää Heitä lähinnä
      Yhteiskunta
      26
      933
    8. Mitä alkoholijuomaa on myyty sekä Linda Lampeniuksen että Matti Nykäsen nimellä? Testaa tietosi!

      Mikähän alkoholijuoma se mahtoi olla…? Tule pelaamaan kivaa Testerin Juomavisaa! Kuinka monta saat oikein? Tästä pääse
      Juomat
      10
      899
    9. Sinkkujen lapset ja kesäloman pituus

      Tuli mieleeni kysyä oletteko huolissanne lasten ja nuorten tulevaisuudesta, tai siitä mitä he nyt joutuvat kokemaan yhte
      Sinkut
      170
      818
    10. Voiko vauva uskoa ?

      Lohkoissa väitetään ettei vauva voi uskoa. Tässä näet vauvan uskon. https://youtube.com/shorts/QhFbPSdjpnA?si=Zb2BCRST9
      Helluntailaisuus
      186
      706
    Aihe