I happened to browse trunk code and noticed the field order for struct event is not the best.
Attached patch reorders fields on struct event to remove holes. Size decreases 24 bytes on 64-bit CPU, 4 bytes on 32bit. Details: 32bit 64bit trunk old 80 152 trunk new 76 128 difference -4 -24 for comparision: libevent 1.4 72 128 -- marko
Index: event-internal.h =================================================================== --- event-internal.h (revision 912) +++ event-internal.h (working copy) @@ -42,7 +42,6 @@ #define ev_signal_next _ev.ev_signal.ev_signal_next /* used only by signals */ -#define ev_ncalls _ev.ev_signal.ev_ncalls #define ev_pncalls _ev.ev_signal.ev_pncalls struct eventop { Index: include/event2/event_struct.h =================================================================== --- include/event2/event_struct.h (revision 912) +++ include/event2/event_struct.h (working copy) @@ -81,14 +81,14 @@ TAILQ_ENTRY (event) (ev_next); int min_heap_idx; /* for managing timeouts */ + evutil_socket_t ev_fd; + struct event_base *ev_base; - evutil_socket_t ev_fd; union { /* used by signal events */ struct { TAILQ_ENTRY (event) (ev_signal_next); - short ev_ncalls; /* Allows deletes in callback */ short *ev_pncalls; } ev_signal; @@ -98,12 +98,14 @@ } ev_periodic; } _ev; + short ev_ncalls; + short ev_events; + int ev_pri; /* smaller numbers are higher priority */ + struct timeval ev_timeout; - int ev_pri; /* smaller numbers are higher priority */ - /* allows us to adopt for different types of events */ void (*ev_closure)(struct event_base *, struct event *); void (*ev_callback)(evutil_socket_t, short, void *arg);
_______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkeymail.org/mailman/listinfo/libevent-users