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

Reply via email to