Do strings with enum allocate at usage point?
Daniel Kozák via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Mar 18 00:58:40 PDT 2015
On Tue, 17 Mar 2015 11:25:00 -0700
Ali Çehreli via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
wrote:
> On 03/17/2015 11:21 AM, "岩倉 澪" wrote:
> > I often hear it advised to avoid using enum with arrays because they
> > will allocate at the usage point, but does this also apply to
> > strings? strings are arrays, so naively it seems that they would,
> > but that seems odd to me.
> > I would imagine string literals end up in the data segment as they
> > are immutable.
> >
> > As a continuation of this question, I know that string literals
> > have an implicit null delimiter, so it should be correct to pass a
> > "literal".ptr to a function taking a C-string, and presumably this
> > still applies when using enum.
> > However, if enum implies allocation at the usage point for strings,
> > one would be better served with static, meaning one would need to be
> > explicit: static foo = "bar\0"?
>
> Strings are fine and fortunately it is very easy to test:
>
> enum arr = [ 1, 2 ];
> enum s = "hello";
>
> void main()
> {
> assert(arr.ptr !is arr.ptr);
> assert(s.ptr is s.ptr);
> }
>
> Ali
>
But is it document somewhere by spec? Or it is just an optimalization
which could be remove at some point?
More information about the Digitalmars-d-learn
mailing list