This also happens with sparc-sun-solaris2.8 4.1.2 a.cc: struct buffer { char buf[65536]; };
buffer *makeBuffer() { return new buffer(); } end of a.cc g++ -O2 -S a.cc a.s: .... movl $65536, (%esp) call _Znwj movl %eax, %ebx movl %ebx, %edx movl $65536, %eax movl %eax, 8(%esp) movl $0, 4(%esp) movl %edx, (%esp) call memset .... Give buffer a default constructor and the memset call disappears. b.cc: struct buffer { char buf[65536]; buffer() {} }; buffer *makeBuffer() { return new buffer(); } end of b.cc g++ -O2 -S b.cc b.s: ... movl $65536, (%esp) call _Znwj leave ret ... -- Summary: Unwanted memset in default constructor Product: gcc Version: 3.4.6 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kbateman at seicorp dot com GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33401