问题标签 [register-keyword]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 出现在函数参数中的寄存器说明符
我试图理解,将register说明符应用于函数参数有什么意义。以下代码有效:
为什么register说明符适用于函数参数?
c++ - 通过引用传递寄存器变量
我看过代码,其中带有 register 关键字的变量通过引用传递给函数。
版本 1:
版本 2:
两个版本有什么区别?
据我了解,a和b保存在寄存器中,因此引用运算符不应该有任何影响,因为对这些寄存器中的值所做的更改应该在调用者-被调用者边界上持续存在,而不使用引用运算符。
c - C 语言标准是否指定了对全局寄存器变量的支持
我读到 gcc 提供了将全局变量定义为寄存器存储变量的支持。我想知道的是标准是否有任何关于这种支持的规范。
c - 如何确保使用“寄存器”说明符定义的变量是否存储在 CPU 寄存器中?
我想知道,我们如何确保使用register说明符定义的变量是否存储在 CPU 寄存器中?
c - “指向寄存器变量的指针”作为函数参数有什么作用?
据我了解,register说明符提示编译器将变量存储在寄存器中。XKBlib.h这一切都很好,直到我在Xorg-7.7中遇到以下声明:
注意如何sym_return作为指针传递给寄存器变量。让我想知道的是
- 尽管不可能获取寄存器变量的地址,但这似乎是允许的,
- 在函数声明中提到这似乎很重要。
第 1 点似乎在某种程度上无效,因为我似乎能够将指针传递给非register变量,即使使用-pedantic-errorsGCC 的标志也是如此。
register那么,与省略关键字的声明相比,此声明有何变化?它会改变调用约定还是什么?
c - 为什么在 DJBX33A 哈希算法中使用 `register`?
我看到register在这里使用。
https://gist.github.com/hmic/1676398
但我不明白为什么它被指定为register. 似乎这里列出的原因不适用。
https://www.geeksforgeeks.org/understanding-register-keyword/
谁能让我知道为什么register需要 DJBX33A 哈希算法?
c - 为什么可以将寄存器数组名称分配给指针变量而不会出现编译器错误?
register我对C 中的关键字有疑问。
我发现register数组名称(例如array)可以分配给指针变量,而&array[0]不能。
你能解释一下为什么数组名可以分配给指针吗?或者,如果有人已经解释过,请让我知道链接,以便我查看答案。谢谢你。
这是我尝试过的:
我读了解释关键字的cppreference ,它说:register
寄存器数组不能转换为指针。
另外,我阅读了 C89 草案,其中说:
实现可以将任何寄存器声明简单地视为自动声明。但是,无论是否实际使用可寻址存储,使用存储类说明符寄存器声明的对象的任何部分的地址都可能不会被计算,无论是显式(通过使用 3.3.3.2 中讨论的一元 & 运算符)还是隐式(通过将数组名称转换为指针,如 3.2.2.1 中所述)。因此,唯一可以应用于使用存储类说明符寄存器声明的数组的运算符是 sizeof。
看起来我无法将寄存器数组名称分配给指针以获取其地址。
此外,为了找到答案,我在这里搜索并找到了这个问题: 寄存器变量地址。有很好的答案,但是,我仍然找不到我想要的答案。
这是我测试的代码。我通过带有标志的Clang编译了这段代码-std=c89:
我预计两者p = array;并p = &array[0];导致编译错误,但仅p = &array[0];产生编译错误。
c - 使用未初始化的变量而不调用未定义的行为
从 6.3.2.1(强调我的)
如果左值指定了一个可以使用寄存器存储类声明的具有自动存储持续时间的对象(从未使用过它的地址),并且该对象未初始化(未使用初始化程序声明并且在使用之前没有对其进行分配) ),行为未定义。
这意味着,如果无法使用寄存器存储类声明自动对象(获取它的地址):
根据 6.3.2.1,if (x == 2)在我使用未初始化对象的值的地方没有未定义的行为。如果这是真的,并且这里没有 UB,那么定义的行为是什么?x根据标准,我应该期待什么?
arrays - 如何使用 C 中的寄存器存储类创建数组?
众所周知,使用寄存器存储类声明的变量的地址不能被取走。所以我尝试使用 register 关键字创建一个数组并尝试访问该元素。但我注意到编译器没有引发任何错误。
众所周知,编译器会将表达式 x[0] 转换为 *(x+0),其中 x 表示基地址。但是,既然数组是用寄存器存储类声明的,怎么可能得到数组的基地址呢?
提前致谢..