问题标签 [gcc-extensions]
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++ - 我应该总是在 __builtin_return_address 之后使用 __builtin_extract_return_addr
可能需要对返回值进行额外的后处理,请参阅
__builtin_extract_return_addr
。返回地址在内存中的存储表示可能与返回的地址不同
__builtin_return_address
。例如,在 AArch64 上,存储的地址可能会被返回地址签名破坏,而返回的地址__builtin_return_address
则不会。
返回地址的存储表示形式是什么?
__builtin_extract_return_addr:
返回的地址
__builtin_return_address
可能必须通过这个函数来获取实际的编码地址。例如,在 31 位 S/390 平台上,最高位必须被屏蔽,或者在 SPARC 平台上,必须添加偏移量才能执行真正的下一条指令。如果不需要修复,此函数只需通过 addr。
实际的编码地址是什么?
这是否意味着__builtin_return_address
返回地址以某种方式为 CPU 编码?并__builtin_extract_return_addr(__builtin_return_address(0))
返回直接(没有任何编码)实际(没有任何班次)返回地址?
如果是这样,为什么有人需要使用__builtin_return_address
without __builtin_extract_return_addr
?
我只想找出哪个函数调用了我的函数。我有使用nm实用程序获得的所有函数的地址。返回的地址nm
和返回的地址__builtin_extract_return_addr(__builtin_return_address(0))
是否编码相同?
c - 测试 GNU 扩展
我想制作一个宏来返回复数的实部(适用于 double、float 和 long double 类型)。GNU C 扩展__real__
似乎符合要求(尽管不幸的是它不可移植)。我正在尝试以下操作:
然而,扩展似乎__real__
没有被定义为一个普通的宏,所以 defined( __real__
) 测试失败了,即使它可用。有谁知道如何测试是否存在__real__
为此制作适当的宏?
此外,如果有人知道这样做的便携方式,我也会对该解决方案感兴趣。
c++ - 与 if-else 相比,在 Switch-case 中使用 range 是否会增加编译时间
这是更有效还是:-
这是一个小例子,但如果范围很大并且案例数量也很多,那么 switch case 方法或 if-else 会更好。
c++ - 为什么在 C++ 中没有定义 n 的 sizeof (array A[n]) 是固定的?
当我试图找到 sizeof(A) 其中 A 是 int 类型且大小为“n”时,n 是一个未定义的 int。我得到一个 496 的输出,当我给 n 一个值然后检查它时,sizeof(A) 给了我相同的 496 值。我知道 Array 是一种静态数据类型,所以无论'n'如何,它都会有内存但是谁能解释一下 496 的值是从哪里来的?