Re: C++ havarující program

Tomáš Hamouz konfery.tomas.hamouz na seznam.cz
Pondělí Srpen 9 14:06:58 CEST 2021


Sice pozdě, ale přece.
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. 
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.

Tomáš


> To je zajimava otazka, je ale mozne, ze fyzickou pamet system prideluje,
> az kdyz se program do te virtualni snazi hrabnout, vzhledem k tomu, ze
> se s polem asi nic nedela, tak to muze byt odlozeno az na okamzik volani
> posledni metody. Ale neoveroval jsem to.

> Dne 31.07.2021 v 21:49 Miroslav Mraz napsal(a):
>> Windows neznám, ale v Linuxu (Ubuntu) je zásobník pro vlákno default 
>> 8MiB, shell ho může modifikovat příkazem ulimit -s. V C++ dávám data 
>> raději na zásobník (pokud to jde), je to "levnější" než na haldě i 
>> vzhledem k použití cache. Samozřejmě ve Windows to bude zřejmě jinak a 
>> použití haldy může být korektnější.
>> Mimochodem nedává na stack 512KiB, jsou to double, tedy 4x8x64 KiB, 
>> tedy 2MiB a pokud je opravdu v MSVC hloubka stacku 1MiB, mělo by to 
>> spadnout o něco dřív.

>> Mrazík

>> Dne 31. 07. 21 v 20:19 Marek Sembol napsal(a):
>>> Dobry vecer
>>> no asi jsem zabar, ale mne se zda 1MB jako obrovsky. Mne se zda spis 
>>> .... no chybne pokouset se na zasobnik rvat 512KB pole jako lokalni 
>>> promennou ve funkci...
>>> Zkuste kdyztak zauvazovat o malloc/free nebo new/delete.
>>> Pokud trvate na tom, ze to narvete na stack, tak jde vychozi velikost 
>>> zmenit v nastaveni projektu nekde v linkru (presneji neporadim, uz 
>>> pred lety jsem presel na C#). Pripadne (ale to neni vas pripad) jde 
>>> nastavit pri vytvareni noveho threadu.
>>> BR,
>>> Marek

>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list


> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210809/1b22919f/attachment.html>


Další informace o konferenci Hw-list