From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14825 invoked by alias); 11 Aug 2016 12:18:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 14807 invoked by uid 89); 11 Aug 2016 12:18:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=H*M:online, r2, H*r:sk:mailout, H*M:432 X-HELO: mailout06.t-online.de Received: from mailout06.t-online.de (HELO mailout06.t-online.de) (194.25.134.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 11 Aug 2016 12:18:53 +0000 Received: from fwd01.aul.t-online.de (fwd01.aul.t-online.de [172.20.27.147]) by mailout06.t-online.de (Postfix) with SMTP id ED3DF41CC076; Thu, 11 Aug 2016 14:18:48 +0200 (CEST) Received: from [192.168.0.16] (GMlvAmZCrh69kMSy0lmwTBPPdYjbIzXScwYBmpcdytJioKKFtH2EFQCF+hgf6xigdL@[115.165.93.200]) by fwd01.t-online.de with (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384 encrypted) esmtp id 1bXowY-0cwLPE0; Thu, 11 Aug 2016 14:18:38 +0200 Message-ID: <1470917914.639.432.camel@t-online.de> Subject: Re: protected alloca class for malloc fallback From: Oleg Endo To: Trevor Saunders Cc: Jeff Law , Richard Biener , Aldy Hernandez , Martin Sebor , gcc-patches Date: Thu, 11 Aug 2016 12:18:00 -0000 In-Reply-To: <20160811013118.GE21468@ball> References: <1470420954.639.64.camel@t-online.de> <44EE0FB0-A8B9-43F9-BF58-C4D7D27DA944@gmail.com> <57A5B8BE.2000004@redhat.com> <941D179C-146F-4004-BECB-9FB066DDCC8D@gmail.com> <21bcbebe-28a8-58a7-68e8-af9abcb03dce@redhat.com> <20160808173939.GA13790@ball> <1470742429.639.196.camel@t-online.de> <20160809174139.GA18239@ball> <1470848609.639.405.camel@t-online.de> <20160811013118.GE21468@ball> Content-Type: multipart/mixed; boundary="=-MTmkKL1D/hCs6Hkp/7Tv" Mime-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg00912.txt.bz2 --=-MTmkKL1D/hCs6Hkp/7Tv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Content-length: 1426 On Wed, 2016-08-10 at 21:31 -0400, Trevor Saunders wrote: > > Well, I'd say the compromises made in std::string make it pretty > terrible for general purpose use accept where perf and memory doesn't > matter at all. > > std::vector isn't very great size wise either, imho the size / > capacity fields would be much better put in the buffer than in the > struct itself, to save 2 * sizeof (void *) in sizeof std::vector. There's nothing in the standard that says those fields have to go into the vector struct/class itself and not into the data buffer. It just happens to be the way it's implemented in libstdc++. E.g. libc++ implements some things in different ways to save a few bytes here and there. It looks more practical to put those fields into the container itself, otherwise you'd have to do a nullptr check every time you access the size field etc. Although newer compilers optimize away the redundant nullptr checks, older compilers (which GCC wants to be good with) might not do it. In any case, it seems to generate slightly bigger code, at least in one instance (see attachment). Anyway, normally there is more data in the vectors than there are vectors around, so whether sizeof (vector) is 8 or 24 bytes doesn't matter. > > or just having your stack_string type convert to the normal string > type so that you can pass mutable references. But that would imply copying, wouldn't it? Cheers, Oleg --=-MTmkKL1D/hCs6Hkp/7Tv Content-Disposition: attachment; filename="test.cpp" Content-Type: text/x-c++src; name="test.cpp"; charset="UTF-8" Content-Transfer-Encoding: base64 Content-length: 2644 CiNpZiAwCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyB2ZWN0b3IKewpw dWJsaWM6CiAgdW5zaWduZWQgaW50IHNpemUgKHZvaWQpIGNvbnN0IHsgcmV0 dXJuIG1fYnVmZmVyICE9IG51bGxwdHIgPyBtX2J1ZmZlci0+c2l6ZSA6IDA7 IH0KICBib29sIGVtcHR5ICh2b2lkKSBjb25zdCB7IHJldHVybiBzaXplICgp ID09IDA7IH0KCiAgdW5zaWduZWQgaW50IGNhcGFjaXR5ICh2b2lkKSBjb25z dCB7IHJldHVybiBtX2J1ZmZlciAhPSBudWxscHRyID8gbV9idWZmZXItPmNh cGFjaXR5IDogMDsgfQoKICBUKiBkYXRhICh2b2lkKSB7IHJldHVybiAoVCop KG1fYnVmZmVyICsgMSk7IH0KICBjb25zdCBUKiBkYXRhICh2b2lkKSBjb25z dCB7IHJldHVybiAoY29uc3QgVCopKG1fYnVmZmVyICsgMSk7IH0KCiAgVCYg b3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSB7IHJldHVybiBkYXRhICgp W2ldOyB9CiAgY29uc3QgVCYgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBp KSBjb25zdCB7IHJldHVybiBkYXRhICgpW2ldOyB9Cgpwcml2YXRlOgogIHN0 cnVjdCBidWZmZXJfaGVhZGVyCiAgewogICAgdW5zaWduZWQgaW50IHNpemU7 CiAgICB1bnNpZ25lZCBpbnQgY2FwYWNpdHk7CiAgfTsKCiAgYnVmZmVyX2hl YWRlciogbV9idWZmZXI7Cn07CgoKaW50IGZvbyAoY29uc3QgdmVjdG9yPGlu dD4mIHgpCnsKICBpZiAoeC5lbXB0eSAoKSkKICAgIHJldHVybiAwOwoKICBp bnQgciA9IDA7CiAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB4LnNp emUgKCk7ICsraSkKICAgIHIgKz0geFtpXTsKCiAgcmV0dXJuIHI7Cn0KCi8q Ci1PMiAtbTJhCgltb3YubAlAcjQscjIKCXRzdAlyMixyMgoJYnQJLkw1Cglt b3YubAlAcjIscjEKCXRzdAlyMSxyMQoJYnQucwkuTDUKCXNobGwyCXIxCglh ZGQJIy00LHIxCglzaGxyMglyMQoJYWRkCSM4LHIyCgltb3YJIzAscjAKCWFk ZAkjMSxyMQoJLmFsaWduIDIKLkwzOgoJbW92LmwJQHIyKyxyMwoJZHQJcjEK CWJmLnMJLkwzCglhZGQJcjMscjAKCXJ0cy9uCgkuYWxpZ24gMQouTDU6Cgly dHMKCW1vdgkjMCxyMAoqLwojZW5kaWYKCgojaWYgMQoKdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CmNsYXNzIHZlY3Rvcgp7CnB1YmxpYzoKICB1bnNpZ25lZCBp bnQgc2l6ZSAodm9pZCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgYm9v bCBlbXB0eSAodm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9 CgogIHVuc2lnbmVkIGludCBjYXBhY2l0eSAodm9pZCkgY29uc3QgeyByZXR1 cm4gbV9jYXBhY2l0eTsgfQoKICBUKiBkYXRhICh2b2lkKSB7IHJldHVybiAo VCopKG1fYnVmZmVyKTsgfQogIGNvbnN0IFQqIGRhdGEgKHZvaWQpIGNvbnN0 IHsgcmV0dXJuIChjb25zdCBUKikobV9idWZmZXIpOyB9CgogIFQmIG9wZXJh dG9yIFtdICh1bnNpZ25lZCBpbnQgaSkgeyByZXR1cm4gZGF0YSAoKVtpXTsg fQogIGNvbnN0IFQmIG9wZXJhdG9yIFtdICh1bnNpZ25lZCBpbnQgaSkgY29u c3QgeyByZXR1cm4gZGF0YSAoKVtpXTsgfQoKcHJpdmF0ZToKICB1bnNpZ25l ZCBpbnQgbV9zaXplOwogIHVuc2lnbmVkIGludCBtX2NhcGFjaXR5OwogIFQq IG1fYnVmZmVyOwp9OwoKCmludCBmb28gKGNvbnN0IHZlY3RvcjxpbnQ+JiB4 KQp7CiAgaWYgKHguZW1wdHkgKCkpCiAgICByZXR1cm4gMDsKCiAgaW50IHIg PSAwOwogIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgeC5zaXplICgp OyArK2kpCiAgICByICs9IHhbaV07CgogIHJldHVybiByOwp9CgovKgotTzIg LW0yYQoJbW92LmwJQHI0LHIxCgl0c3QJcjEscjEKCWJ0LnMJLkw3Cgltb3YJ IzAscjAKCXNobGwyCXIxCgltb3YubAlAKDgscjQpLHIyCglhZGQJIy00LHIx CglzaGxyMglyMQoJYWRkCSMxLHIxCgkuYWxpZ24gMgouTDM6Cgltb3YubAlA cjIrLHIzCglkdAlyMQoJYmYucwkuTDMKCWFkZAlyMyxyMAouTDc6CglydHMv bgoqLwoKI2VuZGlmCgo= --=-MTmkKL1D/hCs6Hkp/7Tv--