On Jan 14, 2013, at 17:49, Nicolas George wrote:
>>                              But Microsoft compiler only recognizes
>> _alloca().
> 
> There you are.

#ifdef _MSC_VER
#       define alloca(n)        _alloca(n)
#endif

> 
> There is another problem with alloca(): the scope of the allocation is
> per function, while the scope of a compound literal, as used by the macro
> currently, is per block.

Are you sure? I was under the impression that

n = 10;
{ char *foo = (char*) alloca(n); // char foo[n] in gcc :)
        // fill foo
        printf( "%s\n", foo );
}

is equivalent to

{ char foo[10];
        // fill foo
        printf( "%s\n", foo );
}

meaning that the stack-deallocation of *foo happens upon exit from the block, 
like the releasing of foo[10] ...

> with the current macro, works as expected, whereas if the macro were based
> on alloca(), the error strings would stay allocated until the loop is
> completed. That is a memory leak. Probably not terrible, but still a leak.
 
In my book, a memory leak is memory that's allocated but never deallocated. 
That's not the case here... it's more like a caching/garbage-collection scheme. 
And as long as there are few errors being reported, there won't be much memory 
to free.

R.
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to