C Ohjelmointi

MALLOC-TOIMINNON KÄYTTÖ C ssä

MALLOC-TOIMINNON KÄYTTÖ C ssä
Malloc on sisäänrakennettu toiminto, joka on ilmoitettu otsikkotiedostossa . Malloc on lyhyt nimi 'muistin allokoinnille' ja sitä käytetään dynaamisesti yhden suuren vierekkäisen muistilohkon määrittämiseen määritetyn koon mukaan. Muistin allokointia on kahta staattista ja dynaamista. Staattinen muistin allokointi tehdään kääntöhetkellä, eikä se muutu ajon aikana. Dynaaminen muistin allokointi allokoi muistia suorituksen aikana tälle; käytämme mallocia. Nyt on kohta, mistä tämä muisti tulee, joten kaikki C: n dynaamiset vaatimukset täytetään kasamuistista. Pohjimmiltaan sovelluksessamme / ohjelmassa on 3 erilaista muistia

  • Pino-muisti on paikallista jokaiselle menetelmälle, ja kun menetelmä palaa, pino tyhjentää sen automaattisesti.
  • Globaali muistialue jakaa muistin kaikille globaaleille muuttujille. Tämä muistialue luodaan ohjelman alkuun, ja lopulta se tyhjentää muistialueen automaattisesti.
  • Kassamuisti täyttää aina kaikki ohjelman / sovelluksen dynaamiset vaatimukset. Aina kun käytämme malloc-toimintoa, se lainaa kasasta muistia ja antaa meille sen osoittimen.

Syntaksi:

Malloc-syntaksin muoto on (void *) malloc (size_t size). Joten syntaksissa sanotaan, että malloc vaatii koon, se palauttaa osoittimen pohjimmiltaan tyhjän osoittimen ja koko t on määritelty allekirjoittamattomana kokonaislukuna. Malloc-toiminto yksinkertaisesti jakaa muistilohkon kasaan määritetyn koon mukaan, kuten syntaksissa näkyy, että koko on määritettävä, ja onnistumisen yhteydessä se palauttaa osoitetun muistin ensimmäiselle tavulle osoittavan osoittimen, muuten palauttaa NULL. Joten mallocin tehtävä on jakaa muistia ajoaikaan.

Miksi mitätöi osoitin:

Mallocilla ei ole aavistustakaan mihin se osoittaa; se tarkoittaa yksinkertaisesti, että se ei tiedä mitä tietoja kyseiseen muistipaikkaan tallennetaan. Se vain allokoi käyttäjän pyytämän muistin tietämättä muistiin tallennettavien tietojen tyyppiä. Siksi se palauttaa tyhjän osoittimen.

Malloc vain jakaa muistia sen jälkeen, että käyttäjän vastuulla on tyypittää sopivaan tyyppiin, jotta sitä voidaan käyttää oikein ohjelmassa. Tyhjä osoitin on osoitin, joka voi osoittaa minkä tahansa tyyppisen datan malloc palauttaa tyhjän osoittimen, koska se ei tiedä minkä tyyppistä tietoa tallennetaan muistiin.

Tässä pyydämme mallocia varaamaan nyt 6 tavua muistia, jos menestys malloc palauttaa tyhjän osoittimen. Siinä tapauksessa meidän on pakattava se kokonaislukutyyppiseen osoittimeen, koska haluamme tallentaa kokonaisluvun kyseiseen muistiin. Täällä malloc allokoi 6 tavua muistia kasaan, ja ensimmäisen tavun osoite tallennetaan osoittimeen ptr.

Esimerkkiohjelma:

Tässä on yksinkertainen esimerkkiohjelma malloc-käsitteen ymmärtämiseksi oikealla tavalla.

Täältä näet printf-toiminnon kanssa, että pyydän käyttäjää syöttämään kokonaislukujen määrän. Olemme ilmoittaneet kaksi muuttujaa i: n ja n: n yläpuolelle. Muuttuja n on paikka, johon tallennamme käyttäjän kirjoittaman numeron. Sen jälkeen meillä on malloc-toiminto; haluamme mallocin varaavan kokoluokan vastaavan määrän n kokonaislukua. Kerrotaan koko, jos int n: n kanssa; tämä antaa meille n kokonaisluvun koon. Sen jälkeen malloc palauttaa tyhjän osoittimen, ja määrittelemme sen kokonaislukuosoittajaksi ja tallennamme osoitteen ptr-osoittimeen. Kirjasinkoko on tärkeää, koska se on hyvä käytäntö.

Jos osoitin sisältää NULL, se tarkoittaa, että muisti ei ole käytettävissä. Joten poistumme yksinkertaisesti ohjelmasta poistumisvirheen tilalla. Jos näin ei ole, voimme helposti suorittaa silmukan.

Silmukka kulkee välillä 0 - n-1, ja pyydämme käyttäjää syöttämään kokonaisluvun yksitellen joka kerta. Scanf-toiminnossa on yksi asia kirjoitettu ptr + i, koska tiedämme, että ptr sisältää muistin ensimmäisen tavun osoitteen. Sanotaan, että osoite on tässä 1000, joten minä olen alun perin nolla, joten 1000 + 0 on 1000, joten siihen osoitteeseen tallennetaan ensimmäinen kokonaislukumme, minkä jälkeen kun i: stä tulee 1, niin 1000 + 1, joka on sisäisesti tulkittu (1000) +1: ksi * 4, jos oletan, että kokonaisluvun koko on 4 tavua, ja se olisi yhtä suuri kuin 1004, joten seuraava kokonaisluku tallennetaan 1004 sijaintiin. Ja tämä jatkuu tällä tavalla, osoitteet ovat kuten 1000, 1004, 1008 ja niin edelleen. Emme käytä ampersandia ennen ptr + i: tä, koska ptr antaa meille jo osoitteen kirjoittaessamme ptr: tä, joka on yksinkertaisesti osoitin, ja se sisältää osoitteen, ei arvon, joten ei ole vaatimusta lisätä ampersandia sen eteen, ja tämän käsitteen pitäisi olla selkeä.

Tässä tässä silmukassa teemme yksinkertaisesti yhden asian, tulostamme kaikki kokonaisluvut näytölle; ilmeisesti käytämme ptr + i: tä, mutta tässä tapauksessa me siitä päätämme, koska ptr + i edustaa osoitetta, joten meidän on tehtävä siitä poikkeama. Jos olen yhtä kuin 0, se on 1000, koska oletamme, että ensimmäinen osoite on 1000, joten päätämme siitä; saamme ensimmäisen kokonaisluvun, sitten i on 1, ja siitä tulee 1001, mutta tulkitaan 1004, jos kokonaisluvun koko on 4. Uudelleen. Me päätämme siitä, joten se antaa meille 2nd kokonaisluku. Tällä tavoin kaikki toimii.

Joten tämä on pohjimmiltaan yksinkertainen ohjelma, joka pyytää käyttäjiä syöttämään n kokonaislukua, ja sitten yksinkertaisesti näytämme nuo kokonaisluvut näytöllä. Kun ohjelma on suoritettu, tämä näkyy.

Ensin pyydämme käyttäjää syöttämään kokonaislukujen määrän, ja sitten käyttäjä syöttää kokonaislukuja, ja näytämme ne yksinkertaisesti näytöllä.

Päätelmä:

Edellä mainitussa ohjelmassa ei ole mitään vikaa, kunhan jatkamme sitä hyvin pitkään täällä, lainamme muistia kasasta, mutta emme koskaan palauta muistia kasaan, se tapahtuu vain siinä tapauksessa, että ohjelma / sovellus on juosta pitkään, kuten 24 tuntia. He soittavat jälleen malloc-toimintoon, ja se tarkoittaa jälleen joka kerta, kun he lainaa muistia kasasta eivätkä koskaan palaa, tämä on huono ohjelmointi, joten meidän pitäisi kirjoittaa ilmaiseksi (muistin osoite, joka pitäisi vapauttaa) ennen paluuta. Joten aina malloc-vapaan käyttö on tärkeää. Joten mallocia käytettäessä muistimme on säilynyt, ja malloc varaa muistin niin suureksi kuin kysyt.

Hyvää dynaamisesti muistin allokointia!

Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...