gcc-4.5.3 segfaults wrt alloca

Eric Blake eblake@redhat.com
Fri Dec 9 17:07:00 GMT 2011


On 12/09/2011 07:55 AM, Ryan Johnson wrote:
> On 09/12/2011 5:58 AM, Denis Excoffier wrote:
>> I use the latest packages and cygwin snapshots. The problem described
>> below began several snapshots in the past, around beginning of December.
>>
>> The following program, with static allocation of a reasonable amount
>> of data, segfaults, maybe in alloca(). With a smaller size
>> (eg 10000) it's ok. With new/malloc (even with 100 times more) it's
>> ok. With C or C++. 100% reproducible.
>>    unsigned int const SIZE = 689471;
>>    int foo[SIZE];
> Reasonable? You're trying to stack-allocate 2.5MB of data. Don't do that
> -- stack sizes are 2MB or less in most operating systems. Besides, doing
> anything useful with a buffer that size would completely drown out the
> overhead of calling malloc.

Not only that, but stack allocating more than 64k in a single function
is a recipe for bypassing the guard page and causing windows to silently
quit your program, rather than letting cygwin catch the guard page
access and convert it to normal SIGSEGV handling.  To be portable to all
OS, you should never stack allocate more than 4k in a single function.

-- 
Eric Blake   eblake@redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://cygwin.com/pipermail/cygwin/attachments/20111209/b23c9379/attachment.sig>


More information about the Cygwin mailing list