<html><head><title>Re: C++ havarující program</title>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<span style=" font-family:'Courier New'; font-size: 10pt;">Sice pozdě, ale přece.<br>
Pokud se ve Win nic nezměnilo, tak se fyzicky při startu vlákna alokovaly pro zásobník jen dvě stránky, z toho první RW a druhá protected. V okamžiku jakéhokoliv přístupu k té protected stránce se vyvolala výjimka, ve které se buď přialokovala další stránka (tedy stávající se změnila na RW a přidala se nová, označená jako protected), nebo, při překročení limitu, se vygenerovala chyba. <br>
V uvedeném příkladu vlastní definice data[] nic nealokuje, jen posune SP. K přístupu dojde až v okamžiku kdy se vytváří stack frame při volání další funkce, tím je dané zpoždění mezi "přealokací" a vyvoláním chyby.<br>
<br>
Tomáš<br>
<br>
<br>
<span style=" color: #800000;"><b>> To je zajimava otazka, je ale mozne, ze fyzickou pamet system prideluje,<br>
> az kdyz se program do te virtualni snazi hrabnout, vzhledem k tomu, ze<br>
> se s polem asi nic nedela, tak to muze byt odlozeno az na okamzik volani<br>
> posledni metody. Ale neoveroval jsem to.<br>
<br>
> Dne 31.07.2021 v 21:49 Miroslav Mraz napsal(a):<br>
>> Windows neznám, ale v Linuxu (Ubuntu) je zásobník pro vlákno default <br>
>> 8MiB, shell ho může modifikovat příkazem ulimit -s. V C++ dávám data <br>
>> raději na zásobník (pokud to jde), je to "levnější" než na haldě i <br>
>> vzhledem k použití cache. Samozřejmě ve Windows to bude zřejmě jinak a <br>
>> použití haldy může být korektnější.<br>
>> Mimochodem nedává na stack 512KiB, jsou to double, tedy 4x8x64 KiB, <br>
>> tedy 2MiB a pokud je opravdu v MSVC hloubka stacku 1MiB, mělo by to <br>
>> spadnout o něco dřív.<br>
<br>
>> Mrazík<br>
<br>
>> Dne 31. 07. 21 v 20:19 Marek Sembol napsal(a):<br>
>>> Dobry vecer<br>
>>> no asi jsem zabar, ale mne se zda 1MB jako obrovsky. Mne se zda spis <br>
>>> .... no chybne pokouset se na zasobnik rvat 512KB pole jako lokalni <br>
>>> promennou ve funkci...<br>
>>> Zkuste kdyztak zauvazovat o malloc/free nebo new/delete.<br>
>>> Pokud trvate na tom, ze to narvete na stack, tak jde vychozi velikost <br>
>>> zmenit v nastaveni projektu nekde v linkru (presneji neporadim, uz <br>
>>> pred lety jsem presel na C#). Pripadne (ale to neni vas pripad) jde <br>
>>> nastavit pri vytvareni noveho threadu.<br>
>>> BR,<br>
>>> Marek<br>
<br>
>> _______________________________________________<br>
>> HW-list mailing list  -  sponsored by </b></span></span><a style=" font-family:'courier new'; font-size: 10pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:Hw-list@list.hw.cz">>> Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">>> http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
<br>
<span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>> _______________________________________________<br>
> HW-list mailing list  -  sponsored by </b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:Hw-list@list.hw.cz">> Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">> http://list.hw.cz/mailman/listinfo/hw-list</a></body></html>