Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Laethnes 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
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ž
...
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...
-
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.
-
http://www.csn.ul.ie/~mel/projects/vm/guide/pdf/understand.pdf
-
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?
-
read that article again and again, till it will make a sense for you ;)
-
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 ;).