digitalmars.D.learn - "register int n" alternative
- =?UTF-8?B?0JLQuNGC0LDQu9C40Lkg0KTQsNC0?= =?UTF-8?B?0LXQtdCy?= (11/11) Feb 16 2020 Possible mark variable for force use register ?
- Stefan Koch (12/23) Feb 16 2020 Don't you get a warning from your c compiler a C compiler?
- lithium iodate (8/12) Feb 16 2020 That only applies for C++, where it doesn't (or rather didn't)
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 ?
Feb 16 2020
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.
Feb 16 2020
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 ;)
Feb 16 2020