Page 2 of 2

Re: dfs

Posted: 03 Apr 2013, 12:33
by vecais_dumais_laacis
veel juus ciinaaties ar izdomaatu probleemu... echh

debugmodee funkcijas saakumaa

Code: Select all

0046EBE0  push        ebp  
0046EBE1  mov         ebp,esp 
0046EBE3  sub         esp,0C0h //tiek stacks paarbiidiits par 192 baitiem
0046EBE9  push        ebx  
0046EBEA  push        esi  
0046EBEB  push        edi  
saucot rekursiivi naakosho callu

Code: Select all

0046EC07  mov         eax,dword ptr [d] 
0046EC0A  add         eax,1 
0046EC0D  push        eax  
0046EC0E  call        dfs (437BD5h) 
attieciigi 208 baiti weistojaas + 4i baiti paramam un 4i baiti return adresei kopaa 216 baiti stacka uz callu

Re: dfs

Posted: 04 Apr 2013, 03:45
by bubu
o_O
Man nekā tāda nav (VS2010)

Code: Select all

00CE1020  push        ebp  
00CE1021  mov         ebp,esp  
00CE1023  cmp         dword ptr [d],1388h  
00CE102A  jge         dfs+1Bh (0CE103Bh)  
00CE102C  mov         eax,dword ptr [d]  
00CE102F  add         eax,1  
00CE1032  push        eax  
00CE1033  call        dfs (0CE1005h)  
00CE1038  add         esp,4  
00CE103B  cmp         ebp,esp  
00CE103D  call        _RTC_CheckEsp (0CE1080h)  
00CE1042  pop         ebp  
00CE1043  ret 

Re: dfs

Posted: 04 Apr 2013, 09:13
by vecais_dumais_laacis
un tev shaadaa izpildiijumaa arii stack overflow nokjer?

2010 expresim debug modee ir overflows un attieciigais papildus sub esp
release modee nav overflows

Re: dfs

Posted: 04 Apr 2013, 20:43
by kristapuciitis
Steka izmēru es nebiju mainījis, tas ir 1MB. Un jā, release modē nav overflowa, paldies!

Re: dfs

Posted: 05 Apr 2013, 00:59
by bubu
vecais_dumais_laacis wrote:un tev shaadaa izpildiijumaa arii stack overflow nokjer?

2010 expresim debug modee ir overflows un attieciigais papildus sub esp
release modee nav overflows
ar 5000 nav nekāda overflowa. Tas iestājas tikai ap 90000.

Bet es laikam sapratu problēmu - man "Debug Information Format" settings ir "Program Database (/Zi)". Pēc noklusējuma tas ir "Program Database for Edit And Continue (/ZI)". Es vienmēr to slēdzu ārā :)
Edit And Continue man ir sagādājis vairāk problēmu, nekā labuma.
Rekā izrādās tas arī steka izmēru palielina!

Re: dfs

Posted: 05 Apr 2013, 08:50
by vecais_dumais_laacis
nu ne gluzhi palielina bet edit and continue rezervee katram freimam papildus steku
tas ljauj pielikt nedaudz jaunus variabljus
pieliekot lielaakus edit&continue vairaak nedarbojaas korekti -> izmanto veco kodu

alja

Code: Select all

void dfs(int d)
{
	char bu[ 1 ];
	bu[ 0 ] = 0;
	if (d < 4800)
		dfs(d+1);
};
mainot char bu[ 1 ] uz char bu[ 1024 ]
edit&continue izmanto veco kodu jo stackaa nav paredzeeta tik daudz rezerves vieta

Re: dfs

Posted: 05 Apr 2013, 10:07
by bubu
Es to ļoti labi saprotu.
Rezrvē vietu palielinot steka freimu :)