From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1018 invoked by alias); 8 Nov 2016 20:11:47 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39877 Received: (qmail 24836 invoked from network); 8 Nov 2016 20:11:47 -0000 X-Qmail-Scanner-Diagnostics: from new2-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(66.111.4.224):SA:0(0.0/5.0):. Processed in 0.446587 secs); 08 Nov 2016 20:11:47 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,SPF_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: psprint@fastmail.com X-Qmail-Scanner-Mime-Attachments: |testopt5.zsh| X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at spf.messagingengine.com designates 66.111.4.224 as permitted sender) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= mesmtp; bh=XS+9JqkDwJ5OS/XxtouAfZYEk7o=; b=rJftcG1+4ipDxQMUg5eIi k0hMpk9l1/aOpl5wD6iL1G/b1NTK8DCB00RYGPIfWjw7Et6ZbvEXM85xPJPYoBWl +7Vf3qa6b5Hqu0faGt0Yf9VWgmBEJuBvvKPYm3H8k0MQCWFb8nWGB6VT1jYnNKX/ SC3Oxs5tVO+t1m9L/DiqVY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=smtpout; bh=XS+9JqkDwJ5OS/XxtouAfZYEk 7o=; b=lD8vBcVqtlEzIJ/pergIHyP24/56TfEnVKUHnSSrjpi7BPbDl/kr05d29 qw+1GZZ0+RNffT/Sj6ShsJp1pDHNacN7Q+vOvc80LtT+FIowdtgrrxBFxmqIUtuZ 3JGr9/r6tsu0tfaP+Y3dqrQWpISpps8TP+NLSIfMcc9lvLfdQM= X-ME-Sender: Message-Id: <1478635899.1897979.781551353.05792438@webmail.messagingengine.com> From: Sebastian Gniazdowski To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_147863589918979791"; charset="utf-8" X-Mailer: MessagingEngine.com Webmail Interface - ajax-d68eb56e Subject: [PATCH] Optimization of getarrvalue() Date: Tue, 08 Nov 2016 12:11:39 -0800 --_----------=_147863589918979791 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hello The function contains arrdup() that includes elements beyond end index. I've replaced it with arrdup_max() that has limit parameter =E2=80=93=C2=A0= will duplicate at most that limit of elements. Following test code: test_fun() { local -a arr repeat 12; do arr+=3D( "abcdefghijklmnop" $arr ) done local -a arr2 repeat 2000; do arr2=3D( ${arr[1,300]} ) done } generates array of 4095 elements, and the running times are 1099 ms (optimized) vs 2038 ms (unoptimized). The array generation utilizes previous array optimization. More, I suspect a memory leak in following code that has been replaced: if (v->end <=3D v->start) s[0] =3D NULL; else if (arrlen_ge(s, v->end - v->start)) s[v->end - v->start] =3D NULL; That code adapts array according to end index =E2=80=93=C2=A0however it see= ms that strings after the NULL are then unreachable to freearray() ? That said, I wasn't able to obtain the memory leak with repeated ${arr[1,2]} use for $#arr > 2. Interesting that some tests fail (e.g. ./Y03arguments.ztst) if I here duplicate nular instead of doing: } else if (v->end <=3D v->start) { s =3D arrdup_max(s, 1); s[0] =3D NULL; like in the original code. The test output is then: @@ -6,6 +6,6 @@ line: {tst r}{} line: {tst x}{} line: {tst x }{} -MESSAGE:{no more arguments} +MESSAGE:{} line: {tst x y }{} -MESSAGE:{no more arguments} +MESSAGE:{} --=20 Sebastian Gniazdowski psprint@fastmail.com --_----------=_147863589918979791 Content-Disposition: attachment; filename="arr_opt.diff" Content-Id: <1478635762.1897410.336029e46ee57d51cd5ea0c178b235eccc0cd0d3.53E1B8FE@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="arr_opt.diff" ZGlmZiAtLWdpdCBhL1NyYy9wYXJhbXMuYyBiL1NyYy9wYXJhbXMuYwppbmRl eCA1ZmFiODRhLi4xZTBiZWNlIDEwMDY0NAotLS0gYS9TcmMvcGFyYW1zLmMK KysrIGIvU3JjL3BhcmFtcy5jCkBAIC0yMjkwLDE0ICsyMjkwLDI0IEBAIGdl dGFycnZhbHVlKFZhbHVlIHYpCiAJdi0+c3RhcnQgKz0gYXJybGVuKHMpOwog ICAgIGlmICh2LT5lbmQgPCAwKQogCXYtPmVuZCArPSBhcnJsZW4ocykgKyAx OwotICAgIGlmIChhcnJsZW5fbHQocywgdi0+c3RhcnQpIHx8IHYtPnN0YXJ0 IDwgMCkKKworICAgIC8qIE51bGwgaWYgMSkgYXJyYXkgdG9vIHNob3J0LCAy KSBpbmRleCBzdGlsbCBuZWdhdGl2ZSAqLworICAgIGlmIChhcnJsZW5fbHQo cywgdi0+c3RhcnQpIHx8IHYtPnN0YXJ0IDwgMCkgewogCXMgPSBhcnJkdXAo bnVsYXIpOwotICAgIGVsc2UKLQlzID0gYXJyZHVwKHMgKyB2LT5zdGFydCk7 Ci0gICAgaWYgKHYtPmVuZCA8PSB2LT5zdGFydCkKLQlzWzBdID0gTlVMTDsK LSAgICBlbHNlIGlmIChhcnJsZW5fZ2Uocywgdi0+ZW5kIC0gdi0+c3RhcnQp KQotCXNbdi0+ZW5kIC0gdi0+c3RhcnRdID0gTlVMTDsKKyAgICB9IGVsc2Ug aWYgKHYtPmVuZCA8PSB2LT5zdGFydCkgeworICAgICAgICBzID0gYXJyZHVw X21heChzLCAxKTsKKyAgICAgICAgc1swXSA9IE5VTEw7CisgICAgfSBlbHNl IHsKKyAgICAgICAgLyogSGVyZSBjb3B5aW5nIG5vdCB0aWxsIHRoZSBlbmQg b2YgdGhlIHNvdXJjZSBhcnJheSBpcyBoYW5kbGVkCisgICAgICAgICAqIC0t IGFycmR1cF9tYXggd2lsbCBjb3B5IGF0IG1vc3Qgdi0+ZW5kIC0gdi0+c3Rh cnQgZWxlbWVudHMsCisgICAgICAgICAqIHN0YXJ0aW5nIGZyb20gdi0+c3Rh cnQgZWxlbWVudC4gT3JpZ2luYWwgY29kZSBzYWlkOgorCSAqICBzW3YtPmVu ZCAtIHYtPnN0YXJ0XSA9IE5VTEwKKyAgICAgICAgICogd2hpY2ggbWVhbnMg dGhhdCB0aGVyZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YKKyAg ICAgICAgICogZWxlbWVudHMgYXMgdGhlIHZhbHVlIG9mIHRoZSBhYm92ZSAq MC1iYXNlZCogaW5kZXguCisgICAgICAgICAqICovCisJcyA9IGFycmR1cF9t YXgocyArIHYtPnN0YXJ0LCB2LT5lbmQgLSB2LT5zdGFydCk7CisgICAgfQor CiAgICAgcmV0dXJuIHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy91dGlscy5j IGIvU3JjL3V0aWxzLmMKaW5kZXggNzMzZjU3MC4uZTQzNTFhZCAxMDA2NDQK LS0tIGEvU3JjL3V0aWxzLmMKKysrIGIvU3JjL3V0aWxzLmMKQEAgLTQyMzEs NiArNDIzMSwzNyBAQCBhcnJkdXAoY2hhciAqKnMpCiAKIC8qKi8KIG1vZF9l eHBvcnQgY2hhciAqKgorYXJyZHVwX21heChjaGFyICoqcywgdW5zaWduZWQg bWF4KQoreworICAgIGNoYXIgKip4LCAqKnksICoqc19ia3AsICpia3A7Cisg ICAgaW50IGxlbjsKKworICAgIGxlbiA9IGFycmxlbihzKTsKKworICAgIC8q IExpbWl0IGhhcyBzZW5zZSBvbmx5IGlmIG5vdCBlcXVhbCB0byBsZW4gKi8K KyAgICBpZiAobWF4IDwgbGVuKSB7CisgICAgICAgIHNfYmtwID0gczsKKwor ICAgICAgICAvKiBOdW0uIG9mIGVsZW1lbnRzID09IG1heCwgc2VudGluZWwg KmluZGV4KiBpcyB0aGUgc2FtZSAqLworICAgICAgICBia3AgPSBzW21heF07 CisgICAgICAgIHNbbWF4XSA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgbWF4ID0gbGVuOworICAgIH0KKworICAgIHkgPSB4ID0gKGNoYXIgKiop IHpoYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiAobWF4ICsgMSkpOworCisgICAg d2hpbGUgKCgqeCsrID0gZHVwc3RyaW5nKCpzKyspKSk7CisKKyAgICBpZiAo bWF4IDwgbGVuKSB7CisgICAgICAgIHNfYmtwW21heF0gPSBia3A7CisgICAg fQorCisgICAgcmV0dXJuIHk7Cit9CisKKy8qKi8KK21vZF9leHBvcnQgY2hh ciAqKgogemFycmR1cChjaGFyICoqcykKIHsKICAgICBjaGFyICoqeCwgKip5 Owo= --_----------=_147863589918979791 Content-Disposition: attachment; filename="testopt5.zsh" Content-Id: <1478635831.1897534.81a7ff659163c5d0e9715434c00866170ac3e2a9.7BF304F9@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="testopt5.zsh" IyFTcmMvenNoLWFycjUtYmVmb3JlCiMhU3JjL3pzaC1hcnI1Cgp6bW9kbG9h ZCB6c2gvenByb2YKCnRlc3RfZnVuKCkgewogICAgbG9jYWwgLWEgYXJyCiAg ICByZXBlYXQgMTI7IGRvCiAgICAgICAgYXJyKz0oICJhYmNkZWZnaGlqa2xt bm9wIiAkYXJyICkKICAgIGRvbmUKCiAgICBsb2NhbCAtYSBhcnIyCiAgICBy ZXBlYXQgMjAwMDsgZG8KICAgICAgICBhcnIyPSggJHthcnJbMSwzMDBdfSAp CiAgICBkb25lCn0KCnRlc3RfZnVuCnRlc3RfZnVuCnRlc3RfZnVuCgp6cHJv Zgo= --_----------=_147863589918979791--