Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Ochrana paměti v Linuxu při programování  (Přečteno 3353 krát)

Laethnes

  • Host
Ochrana paměti v Linuxu při programování
« kdy: 15 Října 2008, 10:30:12 »
Dobrý den,
toto je spíš jen takový dotaz jak to v Linuxu funguje a/nebo jak tuto informaci mám najít na netu, protože mě to ňák nejde (google).

Jde mě o to, že jsem slyšel, že Linux si velice dobře chrání paměť; když mám program, který čte z cizí paměti, tak ho shodí, nebo mu v tom prostě zabrání. Nevím už kde a je to delší dobou... Dnes jsem udělal drobný pokus
Kód: [Vybrat]
char *text;
text = new char[1];

const long unsigned int MAX = 1024*(1024/8);
for(unsigned long int i = 0; i < MAX; i++)
std::cout << (int) text[i] << " ";
a nic; program jel dál a zobrazoval samé nuly. Teprve až
Kód: [Vybrat]
...
const long unsigned int MAX = 1024*(1024/7);
...
se chovalo tak, že zobrazilo hromadu nul a nakonec to vyhodilo chybu "Segmention fault" a ukončilo program. Napadlo mě, jestli mě neleze do paměti mého samotného programu (je to poměrně jednoduchý konzolový domácí úkol do programování*), tak jsem tento kód vložil na jeho začátek a nic; vše zůstalo normální...

Tak jak to s tou ochranou je? Spolu s tím, že tam údajně je jsem slyšel, že je to jeden z důvodů, proč Win aplikace se často programují v Linuxu...


*původně nápad o tomto testu vznikl proto, že jsem měl za úkol naprogramovat determinant matice. Tak jsem udělal rovnou třídu matice. Programoval jsem v Code::Blocks a v Linuxu i Win funguje a bez problémů. V MS Visual Studiu (musíme v něm úkoly odevzdávat :((((( ) to ovšem padalo...
« Poslední změna: 09 Prosince 2008, 15:22:36 od Anna Taliánová »

Laethnes

  • Host
Re: Ochrana paměti v linuxu při programování
« Odpověď #1 kdy: 09 Prosince 2008, 10:52:57 »
Mno, tak jsem konečně přišel na to, v čem to je. Resp. jsme se to nedávno učili ve škole: ano, Linux si chrání paměť. Problém je ale v tom, že když se alokuje paměť, systém ji přidělí např. 1/2 MB. Já (program :3) při op. new/fci malloc dostanu pointer na začátek této oblasti a příště, až se bude alokovat, využije se (new/malloc) další část tohoto bloku paměti atd., dokud nějaký je. Takže když čtu za hranice pole, pořád mohu číst v poli, které má přidělen můj program a proto se nic neukončuje a chyba nastává až když se překročí celkově celý naalokovaný blok.

Pokud se mýlím, pls, opravte mě, v opačném případě žádám buď o informování, jak mám změnit název tématu (asi jsem ňák natvrdlý, pořád jsem na to nepřišel), nebo aby to udělal nějaký admin a přidal "[vyřešeno]".
Dík.

nettezzaumana

  • Host

Laethnes

  • Host
Re: Ochrana paměti v linuxu při programování
« Odpověď #3 kdy: 09 Prosince 2008, 11:05:16 »
http://www.csn.ul.ie/~mel/projects/vm/guide/pdf/understand.pdf

Eh, to je docela dlouhé počteníčko :3, ale dík ;). Moje pointa spočívá v tom, že jsem měl záhadu, kterou jsem chtěl vyřešit (i když za ten dokument dík, až si s tím někdy budu chtít vyhrát, mrknu se na to :3) a to by mělo být v tom, co jsem psal jako 2. příspěvek, nebo se mýlím?

nettezzaumana

  • Host
Re: Ochrana paměti v linuxu při programování
« Odpověď #4 kdy: 09 Prosince 2008, 11:09:22 »
read that article again and again, till it will make a sense for you ;)

Laethnes

  • Host
Re: Ochrana paměti v linuxu při programování
« Odpověď #5 kdy: 09 Prosince 2008, 11:13:41 »
read that article again and again, till it will make a sense for you ;)
Na to momentálně nemám čas (blíží se zápočtový týden), ale dík ;).

 

Provoz zaštiťuje spolek OpenAlt.