Mikä on kokonaisluvun ylivuoto?

Kokonaislukujen ylivuoto viittaa ilmiöön, joka esiintyy tietyissä tietokonetyypeissä, joissa niiden merkit vaihtuvat positiivisista negatiivisiksi tai päinvastoin, kun ne saavuttavat sovellettavien alueidensa loppuun. Tietokonealueilla kokonaislukuisilla tietotyypeillä on pyöreät alueet, ja kun ne saavuttavat alueensa toisen pään, ne siirtyvät välittömästi alueensa toiseen päähän. Tätä kutsutaan myös kokonaisluvun ylivuotoksi.

Allekirjoitettu kokonaisluku voi sisältää arvoalueita -231 -(231) -1. Tämän kokonaisluvun arvo ei voi olla (-231) -1; pikemminkin seuraava numero, johon se kasvaa, on alueensa toisessa päässä: (231 – 1). Muutos negatiivisesta positiiviseksi alueensa lopussa on esimerkki kokonaisluvun ylivuotosta. Samalla tavalla kokonaisluvulla ei voi olla arvoa 231; tämä arvo vaihtuisi sen sijaan alueen toiselle puolelle ja muuttuisi -231: ksi.

Tällä ylivuotolla on merkittäviä seurauksia ohjelmoinnin aikana. Taulukossa voi olla vain niin monta indeksiä kuin kokonaislukutyyppi sallii, ja negatiivisia indeksejä ei lasketa. Jos ohjelmoija yrittää luoda taulukon, joka on suurempi kuin kokonaislukutyyppi sallii, voi tapahtua merkittäviä muistivirheitä, koska kokonaisluvun ylivuoto johtaisi negatiiviseen indeksiin. Tämä on erityisen vaarallista kielillä, joilla ei ole nimenomaisia ​​rajojen tarkistustietoja, kuten C ++.

Kun kokonaisluku ylivuoto tapahtuu, siihen liittyviä ylivuotoja, kuten puskurin ylivuoto, kasan ylivuoto ja pinopuskurin ylivuoto, voi esiintyä. Kaikissa näissä tapauksissa kokonaisluvun ylivuoto ylittää muistin rakenteet enemmän dataa kuin nämä rakenteet voivat kuvitella pitävän. Nämä ylivuotot yksinkertaisissa ohjelmissa eivät usein tee paljon muuta kuin aiheuttavat virheellisen luku- tai virheellisen kirjoitusvirheen. Hakkerien manipuloimalla tätä ongelmaa voidaan kuitenkin suunnitella muistivirheitä, jotka voivat aiheuttaa vakavampia ongelmia.

Useimmissa yksinkertaisissa ohjelmissa kokonaisluvun ylivuoto ei ole suuri ongelma. Kokonaislukutyypin rajat ovat riittävän suuret, joten ylivuoto -ongelma ei tule esille, ellei käsitellä paljon dataa kerralla. Joissakin tapauksissa ylivuotoa voidaan lieventää, kuten kasvavien laskureiden tapauksessa, käyttämällä suurempaa tietotyyppiä ja suurempaa aluetta. Suurempi tietotyyppi voisi teoriassa lopulta kohdata saman ylivuoto -ongelman, mutta tietotyyppialueiden kasvaessa mahdollisuudet pienentyä. Kunkin kokonaisluvun tietotyypin alue on vähintään kaksi kertaa seuraavan pienimmän kokoinen, joten lisätiedoille on riittävästi tilaa.