From 82c38fe64c84fc3febcc5c5aa7fe86454ccaf456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 30 Jan 2013 00:37:26 +0100 Subject: [PATCH] store: Micro-optimize `write-string'. * guix/store.scm (write-string): Optimize to write the length, contents, and padding all at once. This yields a 2% improvement on the execution time of "guix-build gdb". --- guix/store.scm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/guix/store.scm b/guix/store.scm index f36ebea390..b0531b9915 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -158,10 +158,13 @@ (put-bytevector p zero 0 (- 8 m))))))) (define (write-string s p) - (let ((b (string->utf8 s))) - (write-int (bytevector-length b) p) - (put-bytevector p b) - (write-padding (bytevector-length b) p))) + (let* ((s (string->utf8 s)) + (l (bytevector-length s)) + (m (modulo l 8)) + (b (make-bytevector (+ 8 l (if (zero? m) 0 (- 8 m)))))) + (bytevector-u64-native-set! b 0 l) + (bytevector-copy! s 0 b 8 l) + (put-bytevector p b))) (define (read-string p) (let* ((len (read-int p))