Returverdi
En henvisning til utgangspunktet for det tildelte regionen returneres etter alloca () -metoden. Skriptet oppfører seg på en udefinerbar måte hvis oppgaven resulterer i en bunke overløp.
Noen bekreftelser
Posix.1-2001 gir ikke denne metoden. Alloca () -metoden er kjent for å ha vært til stede i 32V, 3BSD, PWB, PWB.2, og 4BSD. Det er dokumentert i 4.3BSDs manuelle webside. GNU -varianten brukes av Linux.
Forklaring
Alloca () -funksjonen avhenger av kompileringsprogrammet, så vel som målsystemet. Når det er kontrast til bruk av Malloc (3) pluss gratis, kan bruken av det gjøre det mer effektivt i noen scenarier (3). Under noen omstendigheter kan det også gjøre Space Dealtlocation i programmer som bruker LongJMP (3) eller SiglongJMP enklere (3). Det blir imidlertid ikke bedt om å konsumere det.
Anta at minnet tildelt av Alloca () er reservert inne i stabelrammen. Hvis metoden returneres på en eller annen måte av en funksjonsanrop til LongJMP (3) eller SiglongJMP, blir lagringen øyeblikkelig utgitt (3). Gratis (3) minne som Alloca () har tildelt ikke bør forsøkes! Alloca () samtaler blir ofte oversatt ved hjelp av et inline -skript av GCC (1).
Bugs
Hvis stabelrammen kanskje ikke utvides, ser det ikke ut til å være noen feilmelding. Selv om applikasjonen prøver å bruke det ikke -tildelte minnet etter en forkoblet plassering, er den kvalifisert til å få et SigsEGV -signal. Siden dette stackminnet tildelt av Alloca () kan vises på bunken midt i regionen for metodeparametrene på flere plattformer, må alloca () ikke brukes i listen over parametere for en metodesamtale.
Eksempel 01
La oss komme i gang med våre første eksempler på å bruke alloca () -funksjonen til C. Først må vi opprette en C -fil ved å bruke berøringsinstruksjonen i den nåværende arbeidskatalogen til Kali Linux -systemet. Etter det kan du prøve å åpne det i enhver redaktør etter eget valg for å legge til et C -skript i det. Vi bruker VIM -redaktøren for å åpne “Allocex.c ”-fil.
Innenfor den tomme filen har vi lagt til følgende kode. Denne koden startet med “stdio.H ”header for å benytte seg av standardinngangs- og utgangsstrømmen i programmet. “Alloca.H ”header har blitt brukt til å benytte seg av alloc () c -funksjonen i denne koden. Denne koden inneholder en enkelt hoved () -funksjon som har initialisert en heltallvariabel kalt “Nummer” tildelt med minnet i størrelse 4.
"For" -sløyfen har blitt initialisert og brukt til å øke verdien av variabelen "tall" med 1 ved hver indeks. Den neste "for" -sløyfen har blitt brukt til å vise hver indeksverdi for variabelt tall ved bruk av printf () -funksjonsuttalelsen. Denne koden er fullført her. Vi har lagret det, og det er klart for samling.
Nå har vi samlet denne C -filen med GCC -kompilatoren og opprettet sin objektfil som heter “Allocex.ut ”innen den samme arbeidskatalogen, jeg.e., "virker".
Etter det utførte vi den nyopplagte objektfilen til denne koden i "./" instruksjon. Utgangen har vist totalt 4 verdier for den spesielle variabelen, i.e., Størrelse 4 Minneallokering til variabeltnummeret.
La oss endre iterasjonsnummeret i "for" -løkken, jeg.e., Endre 4 til 5. Følgende kode er oppdatert. La oss lagre det før vi sammenstiller den.
Vi har samlet den modifiserte koden med GCC -kompilatoren for å overstyre objektfilen også.
Ved utførelse har vi segmenteringsfeilen. Det er fordi vi har initialisert variabel størrelse til 5 og bruker "<” sign to iterate the variable “Number” up to 5 which are a total of 6 memory locations, i.e., should be a total of 5.
Eksempel 02
La oss ta et annet eksempel for å tildele det periodisk utgitte minnet til pekerstabelen. Vi har brukt de samme overskriftene med tillegg av “stdlib.h ”header. Main () -metoden er satt opp med erklæringen om noen variabler og en peker. PRINTF- og SCANF -setningene brukes til å vise og få inngangsnummeret fra brukeren mens Alloca () -funksjonen vil tildele minnet til pekervariabelen “nummer” ved å bruke det aktuelle nummeret som er lagt til av en bruker. Hvis minnet som er tilordnet variabelen “nummeret er null”, i.e., Ingen minne som er tildelt, da vil Printf () vise noen feilmeldinger relatert til den. Pluss at Exit (0) -funksjonen vil avslutte dette programmet.
"For" -sløyfen bruker Printf -funksjonen for å vise gjeldende indeksnummer og ber deg om å legge inn verdien for en bestemt indeks ved hjelp av SCANF -funksjonen. Uansett verdien du har lagt til, vil den bli økt med indeksnummeret og lagret i "sum" -variabelen Printf () -funksjonen vil vises "summen" for alle iterasjoner.
Vi har samlet den og opprettet objektfilen.
Utført objektfilen sin, og den har bedt om størrelsen på minnetildeling, i.e., 4. Totalt 4 verdier er lagt til av brukeren og oppsummert av programmet og vist nedenfor:
Konklusjon
Dette handler om bruken av Alloca () -funksjonen for å tilordne den frie plassen til en bestemt variabel, spesielt noen stabler. Du kan se at vi ikke har brukt “Free ()“ -funksjonen for å frigjøre det tildelte rommet som vi vanligvis gjør i Malloc () -funksjonen.