d不应延迟初化和赋值小数组

原文

// dmd -betterC

extern(C) void main(int argc, char** argv)
{
    int[4] arr = 1;
}

这是个少得可怜的四个32位存储.把它推导*调用函数*不必要的,编译器应该只需在此发出四个存储.
这不仅适合int类型,其他内置类型也会受益.避免函数调用的上限可能高达512位(对应当前SIMD宽度).

查看当前主分支,看到了吗?没有memset32!:

_D4testQfFZv:
0000:   55              push      RBP
0001:   48 8B EC        mov       RBP,RSP
0004:   48 83 EC 10     sub       RSP,010h
0008:   48 B8 01 00 00 00 00 mov RAX,0100000001h
0012:   48 89 45 F0     mov       -010h[RBP],RAX
0016:   48 89 45 F8     mov       -8[RBP],RAX
001a:   C9              leave
001b:   C3              ret
posted @ 2023-01-16 14:48  zjh6  阅读(21)  评论(0)    收藏  举报  来源