Strange memory allocation int a[atoi(argv[1])] ?!
chimi
gchimi@gmail.com
Tue Jun 19 22:25:00 GMT 2007
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.
More information about the Gcc-help
mailing list