Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Date: Sun, 3 Jun 2001 23:41:14 +1200 From: Dan Plimak To: Holger Vogt Subject: Re: CreateFiber() : number of fibers limited Message-ID: <20010603234114.A3655@systematik.co.nz> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: Dan Plimak , Holger Vogt References: <3B1A0E67 DOT 1A48AD8A AT unidui DOT uni-duisburg DOT de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <3B1A0E67.1A48AD8A@unidui.uni-duisburg.de>; from holger.vogt@uni-duisburg.de on Sun, Jun 03, 2001 at 12:16:07PM +0200 X-Fnord: Fnord! On Sun, Jun 03, 2001 at 12:16:07PM +0200, Holger Vogt wrote: > Hi, > > independently of the requested stack size (first parameter in > CreateFiber()), CYGWIN will give only 53 fibers. Only when I increase > the stack size above 9.5 MByte, I will get a further reduction in the > number of fibers created. I was intrigued by this difference between gcc and Borland C++Builder and MS Visual C++, so I tried the following code under all three compilers on Win2K: --- #define _WIN32_WINNT 0x0500 /* Coax winbase.h into including ConvertThreadToFiber() */ #include #include #define MEG (1024 * 1024) #define STACKSIZE (MEG * 2) int main() { int param = 0, i = 0; LPFIBER_START_ROUTINE saddr = NULL; LPVOID foo; ConvertThreadToFiber(¶m); while(++i) { foo = CreateFiber(STACKSIZE, saddr, ¶m); if(foo != NULL) printf("Created fiber 0x%08x.\n", foo); else { printf("Failed to create fiber at iteration %d;\n" "stack space allocated: %dMB\n", i, (STACKSIZE * i) / MEG); break; } } return 0; } --- The results are definitely interesting. The runtime code generated by VC++ (6.0) and BCB (bcc32.exe v5.5) will allow stack allocation by fibers until total stack space allocated hits the free memory limit on the system. Whereas with gcc, no matter how small you make your stack, the maximum number of fibers will be 52. (If it was 42, I'd suspect somebody was taking the Hitchhiker's Guide to the Galaxy a wee bit too seriously.) All in all, I don't think this is a bug in the library. It definitely looks like a hard limit on the number of stacks/fibers you can allocate -- something of the sort Danny Smith proposed, but "harder". Without looking at the source, I doubt anybody would be able to pin it down (unless they happen to be the gcc maintainer). You might want to ask on the gcc mailing list(s). Cheers, -- danp -- Want to unsubscribe from this list? Check out: http://cygwin.com/ml/#unsubscribe-simple