Mikä on null, onko se 0?

Ärsyttää lukea kun tästä väitellään ja selitellään, asia on kuitenkin näin:
Tietokone näkee tasan kaksi tilaa, sähköt ON, sähköt OFF, kun viitataan muisti osoitteeseen on arvo 1-64 bittiä, (yleisesti) riippuen prosessorista, käyttöjärjestelmä varaa muistin käyttäen 4-8 tavun osoitinta jolla osoitetaan keskusmuistiin, Muistia ei voi vapauttaa, ainut muistin vapautus tapahtuu sulkemalla virta koneesta, joten käytetään 0-osoitinta kerrotakseen, että tämä alue on vapaa ylikirjoittaa, muisti (ram) voidaan ajaa nollaksi, mutta se ei tarkoita että tämä muistialue olisi vapaa käyttää, siksi muistin osoitin, eli osoite muistiin jonne/jota vapautetaan/luetaan/kirjoitetaan merkitään nollaksi, tällöin kyseinen muistialue on niin sanotusti null, eli vapaa varattavaksi ja käytettäväksi.
11519
Äänestä

Muut lukivat myös

Vastaukset 11

Vanhimmat

Opetttelepa dynaaminen muistinvaraus linkatulla listalla:
http://edu.phkk.fi/opiskelu/mattij/c/dynaamiset.htm

Linkatun listan tietorakenteeeseen voidaan lisätä alkioita, poistaa alkioita (ja vapauttaa muistia), tyhjentää (vapauttaa) koko lista, tai siirtää alkioita listasta toiseen. Tai tehdä linkattuja listoja linkatuista listoista.
NULL viittaa näissä yleensä linkatun listan alkuun (pAlku=NULL) tai loppumerkkiin )pUUsi->pNextr=NULL), malloc ja free komentoja ttarvitaan..

Äänestä

"Muistia ei voi vapauttaa, ainut muistin vapautus tapahtuu sulkemalla virta koneesta,"

Kyllä voidaan esim. C:ssä mallocilla varattu muisti ja vapautus free-käskyllä.

"joten käytetään 0-osoitinta kerrotakseen, että tämä alue on vapaa ylikirjoittaa,"

Ei toimi. Mutta jos ohjelmointi kielessä on roskienkeruu, niin silloin *näennäisesti* toimii. Tällöinkin tosiasiassa kieli automaattisesti (koodarin "selän takana") varaa muistia malloc:illa ja vapauttaa roskienkeruu-systeemillä free-käskyä käyttäen (tai vastaavilla jos ei käytä C:llä).

Taidat sekoittaa roskienkeruukielet ja käyttöjärjestelmältä suoraan muistia varaavat kielet.

Äänestä

NULL on toteutustapaspesifinen makro, joka laajennetaan null-osoitinvakioksi, eli käytännössä void-tyyppinen osoitin jonka arvo on 0. Lunttasin tosta: http://people.freebsd.org/~green/c9x-draft.txt ... Monta hauskaa ongelmaa ratkeaa, kun katsoo standardia. En ymmärrä miksi ne yleensä opettaa koulussa aina ensimmäiseksi C:tä. Ketä kiinnostaa tietää, että pointtereille on määritelty vähennyslasku, mutta yhteenlasku johtaa määrittelemättömään käyttäytymiseen. Hieno perinne, tai jotain... Mutta opetettavat asiat menis ehkä paremmin perille jollain vähemmän nippelitietoa vaativalla työkalulla. Arvaa oikein, ja korjaa harjoitusohjelma toimivaksi :D

Äänestä

Muistia voidaan varata ja vapauttaa, ja niin pitääkin tehdä ennen kuin sinne kirjoitetaan. Pitäähän se johonkin kirjata ylös mitkä alueet muistista on käytössä ja mitkä ei.. Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0.

Äänestä

Alloc/ReAlloc/Free, 3 tosi asiaa on varata vapaata tilaa, varata edelliseen nähden lisää, jolloin vain näennäisesti osoitetaan uuteen avaruuteen, vapaututtaa varattu tila, ei nollata kuitenkaan muistia vaan tila, mistä ihmeestä revitte tätä paskaa jota tänne syydätte, jos suoraan muistiin kirjoittaa null on aivan sama onko siellä vaikka mitä, järjestelmän "linkkitauluun" kun taasen lyödään null, on muisti vapaa joko alloc/reallloc käskylle, mutta se helvetin null on tasan 0-byte arvo siellä listauksissa, uskokaa tai antakaa assylla screenshot windows/x puolelta jossa oikeaoppisesti näin ei ole..

En ymmärrä miksi tästä aina väitellään, jos muuta mieltä niin todisteet mukaan.

Äänestä
  • Korjaus: ReAlloc myös edelliseen nähden voidaanvarata vähemmän, jolloin tosiasiassa muisti vapautetaan tai merkitään varatuksi (harvoin).

    M-KAR
    " Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0"

    M-KAR kerro minulle millä tavun lukuarvolla koneelle osoitetaan NULL, kerro myös miksi kun olet niin oikeassa ja annappa vielä natiivi c-ohjelma jossa ilman 0 (nolla) merkkiä, ilman null-merkkiä vapautat, sallit muistin yliajoon, eipä onnistu..

    Äänestä

  • nillitys yhä kirjoitti:

    Korjaus: ReAlloc myös edelliseen nähden voidaanvarata vähemmän, jolloin tosiasiassa muisti vapautetaan tai merkitään varatuksi (harvoin).

    M-KAR
    " Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0"

    M-KAR kerro minulle millä tavun lukuarvolla koneelle osoitetaan NULL, kerro myös miksi kun olet niin oikeassa ja annappa vielä natiivi c-ohjelma jossa ilman 0 (nolla) merkkiä, ilman null-merkkiä vapautat, sallit muistin yliajoon, eipä onnistu..

    Se lukuarvo voi olla mitä tahansa. Riippuu ympäristöstä. Ohjelmoija ei käsittele sitä millään numerona vaan NULL:na.

    Äänestä

  • ootko vielä päissäs?

    Äänestä

  • "En ymmärrä miksi tästä aina väitellään, jos muuta mieltä niin todisteet mukaan."

    Sinähän tässä väität jotain (mistä ei oikein saa edes selvää), joten todisteet pitäisi sinun esittää.

    Testasin C-ohjelmalla, joka varaa muistia 100 megaa ja kirjoittaa sen roskaa täyteen, jonka jälkeen asettaa poitterin nollaksi. Tulos: muisti ei vapaudu.
    (Huom. sinne muistiin pitää kirjoittaa oikeasti jotain, muuten se ei varaa todellista keskusmuistia.)

    Mikäli ymmärsin oikein, niin väitit että muisti vapautuu kun asettaa poitterin nollaksi, tuo ohjelma osoitti väitteesi vääräksi.

    (En laita koodia tänne, koska jokainen osaa tuollaisen väsätä itse.)

    Äänestä

NULL on tietokoneen nolla, joka voi olla ihmiselle vaikka 123.456. Kuitenkin ihminen voi keskustella tasan nollasta tietokoeen kanssa kertomalla tietokoneelle, että nyt on puhe nollasta eli NULL: ista

Äänestä
  • Myös eri tietokoneet voivat sujuvasti keskustella keskenään nollasta, vaikka niillä olisi täysin eri mielipide nollan paikasta lukualueessa. Kertomalla muille tietokoneille, että nyt on puhe nollasta eli NULL: ista mikä tahana tietokonekin voi olla varma siitä, että kaikki muut tietokoneetkin ymmärtävät, että niittenkin pitää katsoa omaa nollaansa eli NULL: ia, joka on multiuniversaali eli tarkoittaa samaa kaikissa tietokoneuniversumeissa eli kaikkissa mahdollisissa lukualueissa, joissa nollan paikka voi olla missä tahansa. Tämä on jo siitäkin syystä järkevää, ettei edes ihmiskunnalla ole täysin selvää käsitystä siitä, mikä nolla itseasiassa on. Tämä ilmenee siinä, että heti, kun joku matemaatikoistamme lausuu nollasta jotain uutta ja järkevää, hänelle myönnetään matematiikan Nobel-palkinto.

    Äänestä

Kommentoi aloitusta


Hermot menee kirjoitti:

Ärsyttää lukea kun tästä väitellään ja selitellään, asia on kuitenkin näin:
Tietokone näkee tasan kaksi tilaa, sähköt ON, sähköt OFF, kun viitataan muisti osoitteeseen on arvo 1-64 bittiä, (yleisesti) riippuen prosessorista, käyttöjärjestelmä varaa muistin käyttäen 4-8 tavun osoitinta jolla osoitetaan keskusmuistiin, Muistia ei voi vapauttaa, ainut muistin vapautus tapahtuu sulkemalla virta koneesta, joten käytetään 0-osoitinta kerrotakseen, että tämä alue on vapaa ylikirjoittaa, muisti (ram) voidaan ajaa nollaksi, mutta se ei tarkoita että tämä muistialue olisi vapaa käyttää, siksi muistin osoitin, eli osoite muistiin jonne/jota vapautetaan/luetaan/kirjoitetaan merkitään nollaksi, tällöin kyseinen muistialue on niin sanotusti null, eli vapaa varattavaksi ja käytettäväksi.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu