Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <utf1ee$2ggc7$1@i2pn2.org>
Deutsch   English   Français   Italiano  
<utf1ee$2ggc7$1@i2pn2.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.misty.com!weretis.net!feeder6.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: fir <fir@grunge.pl>
Newsgroups: comp.lang.c
Subject: Re: > fails. Because heaps are unlimited whilst stacks are not.
Date: Wed, 20 Mar 2024 17:04:30 +0100
Organization: i2pn2 (i2pn.org)
Message-ID: <utf1ee$2ggc7$1@i2pn2.org>
References: <uteqa1$2g5vi$1@i2pn2.org> <utevdc$2gdd0$1@i2pn2.org> <utf0kg$2gfb2$1@i2pn2.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 20 Mar 2024 16:04:30 -0000 (UTC)
Injection-Info: i2pn2.org;
	logging-data="2638215"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="+ydHcGjgSeBt3Wz3WTfKefUptpAWaXduqfw5xdfsuS0";
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0 SeaMonkey/2.24
X-Spam-Checker-Version: SpamAssassin 4.0.0
In-Reply-To: <utf0kg$2gfb2$1@i2pn2.org>
Bytes: 8234
Lines: 239

fir wrote:
> fir wrote:
>> fir wrote:
>>> [answer to m.mclean..i post it separately as for me that low level
>>> things are specially interesting and worth separate message imo..though
>>> i kno sadly there are not much low lewel winapi likers people here, like
>>> me who likes low lewel and uses winapi]
>>>
>>> this is not strictly true
>>>
>>> well important knowledge which not mantyy programers know i think is
>>> that how the layout of program im memory of you system is exactly
>>>
>>> and i think this knowledge should be learn "by heart" just to increase
>>> understanding
>>>
>>> i know somewhat how it looks like in win32 :
>>>
>>> generally the addres space aplication have os from 0x0000 0000 to 0x7fff
>>> ffff - which is only 2 gigabytes
>>>
>>> (hovever i like it and still prefer writing my windows programs on win32
>>> than win 64, 2 gigabytes of ram is enough for me)
>>>
>>> your program is by default placed at 0x0040 0000 (which is 4MB from
>>> start of adres space)..there is smal pe header loaded to ram then your
>>> assembly binary code (typical entry point it is first assemby
>>> instruction to run is at 0x00401000 ) then you got loaded const data
>>> (.data and .rdata)
>>> after the machine code then you got, static empty arrays (.bss) (which
>>> are
>>> usually big like 100 MB or more depending how many static arrays you
>>> got) (allso smaller sections also could be placed there .rsrc for
>>> example, .tls, .idata (imports), .CRT, .tls)
>>>
>>> the dlls your program links to are placed from the top it is from 0x7fff
>>> ffff down below, both system ones, part side ones or yours own
>>>
>>> system ones are optimised to not have .bss which consumes most of the
>>> memory so system dlls do not occupy lot of ram (hovevevr system dlls
>>> loads and i for example write pure winapi programs and still that system
>>> dlls loaded in my program space are nearly 20 od system dlls)
>>>
>>> heap you got BETWEEN end of your code and begin of dlls, so if your
>>> program uses 300 MB od static tables (my fault as i used tod eclate a
>>> lot of static tables in various files) and your dlls in sum use 500 MB
>>> (of their .bss mostly)  then your heap is limited to 1.3 GB on win32
>>>
>>> at least this is what i know
>>>
>>>
>>> the stack in turn is betwwwen your app start that +4MB and the starting
>>> point, im not exactly syre but its probably something about +3M down do
>>> +1M approximatelly
>>>
>>> stack could be set to bigger in your exe heder your exe has 9may be
>>> modified by -something switch in gcc comandline) and i not tested it
>>> afair (or rather tested but forgot the strict conclusions) but i dont
>>> se nthing specially wrong even in setting this stack to 100 MB
>>>
>>> 2 MB by default is silly and if you have 10 GB of ram putting 100 MB for
>>> stack is not even a waste becouse if it is not used it only consumes
>>> "logical" ram pages afair but reall ram is not even attached
>>> (downside is it will not run on pc that have less that 100 MB ram as it
>>> couldnt alloocate stac i guess but some must assume some numbers today
>>> probably, and sadly i would assume at least 2-4 GB and assuming less is
>>> optimisation)
>>>
>>> (I also dont checked if there are some hardcoded limits for stack size
>>> like it cant be bigger than 1 Gb or so, could be checked)
>>>
>>> some vaules some can obtain just by printfing pointers in c application,
>>> pointers to stack objectm, pointer to aray begoning pointer to some
>>> function, maybe pointer to dlls attached (its function or datya) and
>>> pointers to heap storage
>>>
>>>
>>>
>>
>> note some experimentation
>>
>> void foo(int how)
>> {
>>    int b = 90;
>>
>>    printf("\n b %p ", &b);
>>
>>    if(how>0) foo(how-1);
>>
>> }
>>
>> int main(void)
>> {
>>
>>    int a = 100;
>>    printf("  main %p , a %p",  main, &a);
>>
>>    foo(10);
>>
>> //  (.... here rest of bigger program skipped as i dont wanted to start
>> new project foor test
>>
>> }
>>
>> the result
>>
>>    main 00402BC0 , a 0022FF48
>>   b 0022FF4C
>>   b 0022FF0C
>>   b 0022FEDC
>>   b 0022FEAC
>>   b 0022FE7C
>>   b 0022FE4C
>>   b 0022FE1C
>>   b 0022FDEC
>>   b 0022FDBC
>>   b 0022FD8C
>>   b 0022FD5C
>>
>> the entry point is about as i said, stack seem to be probably from
>> 0x0023 0000 down below to 0x0003 0000, dont know if its weird if a
>> variable is 'below' the first b - it seem meybe weird but i dont hinked
>> why is that, i may yet run a crash test
>>
>> void foo(int how)
>> {
>>    int b = 90;
>>    int tab[32*1024];
>>
>>    tab[0] = how;
>>
>>    printf("\n b %p tab %p ", &b, tab);
>>
>>    if(how>0) foo(how-1);
>>
>> }
>>
>> int main(void)
>> {
>>
>>    int a = 100;
>>    printf("  main %p , a %p",  main, &a);
>>
>>    foo(15);
>>
>>   //...
>> }
>>
>>
>> result
>>
>>    main 00402C10 , a 0022FF4C
>>   b 0020FF0C tab 0020FF10
>>   b 001EFEDC tab 001EFEE0
>>   b 001CFEAC tab 001CFEB0
>>   b 001AFE7C tab 001AFE80
>>   b 0018FE4C tab 0018FE50
>>   b 0016FE1C tab 0016FE20
>>   b 0014FDEC tab 0014FDF0
>>   b 0012FDBC tab 0012FDC0
>>   b 0010FD8C tab 0010FD90
>>   b 000EFD5C tab 000EFD60
>>   b 000CFD2C tab 000CFD30
>>   b 000AFCFC tab 000AFD00
>>   b 0008FCCC tab 0008FCD0
>>   b 0006FC9C tab 0006FCA0
>>   b 0004FC6C tab 0004FC70
>>
>> floating window appear "there occured a problem with this application..
>> do send a data on this problem to microsoft?"
>>
>> so it is like expected
>>
>> (hovevevr if i would be bill gates i would tell them to clearly note
>> what kind of error this is if this is stack overflow say it is stack
>> overflow)
>
>
> yet some crash test with stack set to 100 MB (-Wl,--stack,104857600)
========== REMAINDER OF ARTICLE TRUNCATED ==========