Hello,
currently the struct _reent contains some atexit() stuff:
struct _reent {
[...]
/* atexit stuff */
struct _atexit *_atexit;
struct _atexit _atexit0;
[...]
};
on PowerPC for example this accounts for 400 of 1088 bytes of the
structure. From my point of view the atexit() stuff belongs to the
global state and is not thread-specific. I think all atexit() related
functions (in __call_atexit.c and __atexit.c, are there more?) use
_GLOBAL_REENT. This is related to the possibly unused _wrapup_reent()
function. Maybe we should introduce two structures. One for the global
state (contains thread-specific state + atexit() stuff) and one for the
thread-specific state. This might save 400 bytes (37% of current
_reent) per thread.