stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Brown (JIRA)" <j...@apache.org>
Subject [jira] Created: (STDCXX-491) string::push_back() slow
Date Sun, 22 Jul 2007 20:27:06 GMT
string::push_back() slow
------------------------

                 Key: STDCXX-491
                 URL: https://issues.apache.org/jira/browse/STDCXX-491
             Project: C++ Standard Library
          Issue Type: Bug
          Components: 21. Strings
    Affects Versions: 4.1.3
         Environment: gcc 4.1.2, Linux/x86_64
            Reporter: Mark Brown


According to my timings string::push_back() in stdcxx 4.1.3 is more than twice as slow than
the same function in gcc 4.1.2 on Linux x86_64:

$ time ./push_back-stdcxx 100000000

real    0m2.175s
user    0m2.004s
sys     0m0.172s

$ time ./push_back-gcc 100000000

real    0m0.924s
user    0m0.760s
sys     0m0.164s


#include <cassert>
#include <cstdlib>
#include <string>

int main (int argc, char *argv[])
{
    const int N = argc < 2 ? 1 : std::atoi (argv [1]);

    std::string str;

    for (int i = 0; i < N; ++i)
        str.push_back ('x');

    assert (str.size () == std::size_t (N));
}

Comparing the generated assembly, the gcc push_back() is mostly inline but the stdcxx push_back()
is not:

stdcxx:
_Z8pushbackRSsc:
.LFB449:
	movq	(%rdi), %rax
	movl	%esi, %edx
	movl	$1, %ecx
	movsbl	%dl,%r8d
	xorl	%edx, %edx
	movq	-8(%rax), %rsi
	jmp	_ZNSs7replaceEmmmc


gcc:
_Z8pushbackRSsc:
.LFB904:
	movq	%rbp, -16(%rsp)
.LCFI0:
	movq	%r12, -8(%rsp)
.LCFI1:
	movq	%rdi, %rbp
	movq	%rbx, -24(%rsp)
.LCFI2:
	subq	$24, %rsp
.LCFI3:
	movq	(%rdi), %rax
	movl	%esi, %r12d
	subq	$24, %rax
	movq	(%rax), %rbx
	addq	$1, %rbx
	cmpq	8(%rax), %rbx
	ja	.L2
	movl	16(%rax), %eax
	testl	%eax, %eax
	jg	.L2
.L4:
	movq	(%rbp), %rdx
	movq	-24(%rdx), %rax
	movb	%r12b, (%rdx,%rax)
	movq	(%rbp), %rax
	subq	$24, %rax
	movl	$0, 16(%rax)
	movq	%rbx, (%rax)
	movb	$0, 24(%rax,%rbx)
	movq	(%rsp), %rbx
	movq	8(%rsp), %rbp
	movq	16(%rsp), %r12
	addq	$24, %rsp
	ret
	.p2align 4,,7
.L2:
	movq	%rbx, %rsi
	movq	%rbp, %rdi
	call	_ZNSs7reserveEm
	jmp	.L4

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message