www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - New vs length on dymamic array

reply Andrey <saasecondbox yandex.ru> writes:
Hello,

Are here any differences in creation of dynamic array with known 
size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
Nov 09 2020
next sibling parent reply Imperatorn <johan_forsberg_86 hotmail.com> writes:
On Monday, 9 November 2020 at 08:06:54 UTC, Andrey wrote:
 Hello,

 Are here any differences in creation of dynamic array with 
 known size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
You can check using compiler explorer: https://godbolt.org/
Nov 09 2020
next sibling parent Vladimirs Nordholm <v vladde.net> writes:
On Monday, 9 November 2020 at 09:05:58 UTC, Imperatorn wrote:
 On Monday, 9 November 2020 at 08:06:54 UTC, Andrey wrote:
 Hello,

 Are here any differences in creation of dynamic array with 
 known size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
You can check using compiler explorer: https://godbolt.org/
I don't understand assembly, so this does not tell me anything useful. Are there any reasons to prefer one over the other? I assume this is what OP is actually asking about.
Nov 09 2020
prev sibling parent =?UTF-8?B?0JLQuNGC0LDQu9C40Lkg0KTQsNC0?= =?UTF-8?B?0LXQtdCy?= writes:
On Monday, 9 November 2020 at 09:05:58 UTC, Imperatorn wrote:
 On Monday, 9 November 2020 at 08:06:54 UTC, Andrey wrote:
 Hello,

 Are here any differences in creation of dynamic array with 
 known size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
You can check using compiler explorer: https://godbolt.org/
Cool tool! Array creation disassemble: https://godbolt.org/z/GzxWao
Nov 09 2020
prev sibling next sibling parent Daniel =?UTF-8?B?S296w6Fr?= <kozzi11 gmail.com> writes:
On Monday, 9 November 2020 at 08:06:54 UTC, Andrey wrote:
 Hello,

 Are here any differences in creation of dynamic array with 
 known size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
In theory auto array = new wchar[111]; // or new wchar[](111); should do less work, but in practice I would guess there will be almost zero difference in speed. If you need to create new dynamic array with known size you should prefere auto array = new wchar[111]; // or new wchar[](111); because it is make much more sense than create empty non initialized array and then set it a length
Nov 09 2020
prev sibling parent user1234 <user1234 12.de> writes:
On Monday, 9 November 2020 at 08:06:54 UTC, Andrey wrote:
 Hello,

 Are here any differences in creation of dynamic array with 
 known size?

 auto array = new wchar[](111);
and
 wchar[] array;
 array.length = 111;
It's the same. If the two are valid then you are in a function. So it's an alloca for the dynamic array payload (8+8 bytes on x86_64) then a LengthExpression that will lead to a GC.malloc, and finally a memset for all the elements default values.
Nov 09 2020