Re: Strange memory allocation int a[atoi(argv[1])] ?!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Brian Dessent wrote:
> 
> chimi wrote:
> 
>> I've just heard that teachers from one of the university of technology
>> say
>> that:
>> 
>> int a[atoi(argv[1])];
>> 
>> is correct way to dynamic allocation... what is more it looks like x =
>> a[999999]; works! o_O
>> but I run memusage test-prog 1000000 and it doesn't call *alloc nor free
>> at
>> all, but works well...
>> 
>> in the other hand
>> int a[32];
>> doesn't allow to acces its 1000000 element (it's ok of course)
>> 
>> I wanted to know what gcc does with atoi(argv[2])? Does it only OS
>> allocate
>> so huge heap so it works?
> 
> This is not a question about gcc, it's a question about the C language,
> so it's off topic for this list.  A better place would be the comp.std.c
> newsgroup.
> 
> There are two different things going on here.
> 
> When you declare "char foo[n]" and n is a compile-time constant then you
> get a standard array of characters allocated on the stack (assuming this
> is in a function not a global file-level scope.)  There will be no call
> to any allocate or free function, as that is how the stack works -- you
> just decrease a pointer.  IF there was not enough memory remaining on
> the stack then you generally get a runtime fault and the program aborts.
> 
> In traditional C the 'n' must be a compile-time constant.  If you try to
> compile your atoi() example on a ANSI or C90 compiler, it will fail.  It
> is only recently in C99 that the standard allows for a new type of
> array, called variable length array (VLA) in which the 'n' can be
> unknown at compile time, as in your example.  VLAs work just like
> alloca(), i.e. the memory still comes from the stack and is invalidated
> whenever the block goes out of scope.  Thus it's only valid for
> allocations that are small and temporary.
> 
> It is debatable whether use of VLAs should really be called "the correct
> way for dynamic allocation."  For one thing, it's a C99 feature and
> there are many compilers out there that have not implemented parts or
> any of C99, so it makes your code very much less portable.
> 
> Also there is the general argument of stack vs. heap allocation, and
> there are many circumstances where it would be a very bad idea to try to
> use a VLA in place of malloc().  Your teachers should go over all of
> this.
> 
> Brian
> 
> 

Thank you very much for the explanation. Now I understand why and how it
works.

chimi
-- 
View this message in context: http://www.nabble.com/Strange-memory-allocation-int-a-atoi%28argv-1-%29---%21-tf3902478.html#a11202139
Sent from the gcc - Help mailing list archive at Nabble.com.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux