On 05/07/2015 11:51 AM, John Snow wrote:
> Instead of converting each byte one-at-a-time and then sending each byte
> over the wire, use sprintf() to pre-compute all of the hex nibs into a
> single buffer, then send the entire buffer all at once.
> 
> This gives a moderate speed boost to memread() and memwrite() functions.
> 
> Signed-off-by: John Snow <js...@redhat.com>
> ---

> -        qtest_send_prefix(chr);
> -        qtest_send(chr, "OK 0x");
> +        enc = g_malloc(2 * len + 1);
>          for (i = 0; i < len; i++) {
> -            qtest_sendf(chr, "%02x", data[i]);
> +            sprintf(&enc[i * 2], "%02x", data[i]);

Making a function call to sprintf() has a lot of overhead.  Isn't it
even faster to open-code the conversion, something like:

for (i = 0; i < len; i++) {
    const char digits[] = "0123456789abcdef";
    enc[i * 2] = digits[data[i] >> 4];
    enc[i * 2 + 1] = digits[data[i] & 0xf];
}
enc[len * 2] = '\0';

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to