Thread overview | |||||
---|---|---|---|---|---|
|
February 16, 2020 "register int n" alternative | ||||
---|---|---|---|---|
| ||||
Possible mark variable for force use register ? Example C-code: { register char *buf; long pos; register int n; register int r; if (!n) return 0; } How to implement in D ? |
February 16, 2020 Re: "register int n" alternative | ||||
---|---|---|---|---|
| ||||
Posted in reply to Виталий Фадеев | On Sunday, 16 February 2020 at 13:48:43 UTC, Виталий Фадеев wrote:
> Possible mark variable for force use register ?
>
> Example C-code:
> {
> register char *buf;
> long pos;
> register int n;
> register int r;
>
> if (!n)
> return 0;
> }
>
>
> How to implement in D ?
Don't you get a warning from your c compiler a C compiler?
The register keyword as been deprecated for ages in C.
Since the compiler cannot actually guarantee that the variable will be a register.
As a result D does not have the register keyword.
in D simply allocating a local is enough (and compiling with optimization enabled), if there is a register free to put the variable in, that's what the optimizer will do.
If you don't want to be at the mercy of the optimizer you can always write a block of asm.
Which is what I usually do when I _really_ care.
|
February 16, 2020 Re: "register int n" alternative | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan Koch | On Sunday, 16 February 2020 at 15:15:44 UTC, Stefan Koch wrote:
> The register keyword as been deprecated for ages in C.
> Since the compiler cannot actually guarantee that the variable will be a register.
> As a result D does not have the register keyword.
That only applies for C++, where it doesn't (or rather didn't) even do the same thing as in C. In C it's an optimization aid with actual semantic implications. A register storage-class variable cannot be aliased, in fact, any attempt should cause compilation failure.
Whether it actually helps modern compilers with optimization is of course another matter ;)
|
Copyright © 1999-2021 by the D Language Foundation