|
Message-ID: <20130704111054.GY15323@port70.net> Date: Thu, 4 Jul 2013 13:10:54 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: musl@...ts.openwall.com Subject: Re: Use of size_t and ssize_t in mseek * Rich Felker <dalias@...ifal.cx> [2013-07-04 04:12:45 -0400]: > On Thu, Jul 04, 2013 at 09:11:29AM +0200, Jens Gustedt wrote: > > > qsort_s can store the comparison function and context in TLS, and then > > > pass to qsort a comparison function that grabs these from TLS and > > > calls the original comparison function with the context pointer. This > > > is valid assuming qsort does not run the comparisons in new threads. > > > > sure, but for an execution of qsort_s this would have a lot of > > indirections and a call to TLS for every comparison. For performance > > sensible functions like this, this doesn't sound very attractive. > > If it's inside musl, the TLS dereference is very cheap on most archs: > it's just a constant offset from the thread pointer. Same if the code > were static linked in the main program. Otherwise, if it's a dynamic > library, then yes it would be fairly costly, like you say. it seems to me that if a qsort_s call sets the tls and then before the callee reads that pointer a signal interrupts with a handler that calls qsort_s again then the tls is overwritten by another pointer so you lose signal-safety with the tls design > > (In P99 I do that with inlining and gcc shows to be able to expand all > > comparisons in place and to optimize that smoothly.) > > Nice. I'll have to take a look -- I've always wanted to see a fully > inlined qsort that could be compared to the C++ template-based sorts > to demonstrate that inline functions in C can do just as good or > better, inlining the comparison callback... :) * Jens Gustedt <jens.gustedt@...ia.fr> [2013-07-04 10:45:47 +0200]: > http://gustedt.wordpress.com/2012/12/04/inline-functions-as-good-as-templates/ good to know that this works now.. it's not clear from the article how the compiler knew that the last arg for qsort_s is supposed to be passed to the comparision function: was it lto+static linking or was the internal of qsort_s visible in the same translation unit? a few years ago i did similar experiments but those failed back then: https://groups.google.com/d/msg/comp.lang.c/sO2oYdZGdd8/bqFZ4i81P7AJ (P.S. google seems to broke its usenet archives, if anyone knows a good one that works without javascript enabled i'm interested, meanwhile you can just replace /d/ with /forum/print/ in the url and get a reasonable rendering without js)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.