我写了一个像这样的简单代码
#include <stdlib.h>
#include <stdio.h>
//#define CONFIG_TARGET_X86_64
#ifdef CONFIG_TARGET_X86_64
static void A( )
{
printf("A\n");
}
#else
void A( );
#endif
static void B( )
{
printf("B\n");
}
static int xx( )
{
#ifdef CONFIG_TARGET_X86_64
return 1;
#else
return 0;
#endif
}
int main(void)
{
if (xx( )) /* define CONFIG_TARGET_X86_64 */
A( );
else
B( );
}
如果我们不定义< code > CONFIG _ TARGET _ X86 _ 64 ,< code>xx( )将始终返回< code>FALSE,所以只声明而未实现的functiopn A将永远不会被调用(死代码)。
用gcc-O0编译它
/tmp/cctSpgGk.o: In function `main':
1.c:(.text+0x34): undefined reference to `A'
collect2: error: ld returned 1 exit status
但它可以由-O1或更高版本编译。
使用GCC 6.1.0版
O1选项中的一个优化选项似乎消除了死代码,我看到了关于GCC的优化文档
https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gcc/Optimize-Options.html
但我找不到。
所以我只想在-O0选项下编译这段代码,可能吗?有没有一些优化标志可以帮我做到这一点?
谢啦
您可以声明A
为弱:
void A (void) __attribute__ ((weak));
然后链接器将忽略未定义的符号引用,但调用此函数将导致崩溃。
这里值得注意的是,这声明了一个方法签名:
void A( );
其中声明了一个方法实现:
void A( ) { };
这两者之间有巨大的区别。
如果使用调用引用函数,则需要实现它。编译器将根据其他因素决定是否优化该函数调用,但它需要知道该函数做什么,而不仅仅是如何调用。
我编译了以下C代码: 使用命令 .下面是输出中的 Bar 函数: 我有几个关于这个汇编代码的问题: > 如果函数体中既没有使用也没有使用rsp,那么"",""和""的目的是什么? 为什么和自动包含C函数的参数(分别为和)而不从堆栈中读取它们? 我尝试将Foo的大小增加到88字节(11s),指令变成了。将我的结构设计为“圆形”大小以避免乘法指令(以优化数组访问)是否有意义?指令被替换为:
我读到,如果我们想在google play中更新应用程序,版本代码应该高于之前的apk文件。我有一个版本代码为20,版本名为1.0的应用程序。所以要更新应用程序,我应该如何增加版本代码?应该增加10吗?还是一个就够了?也就是说,版本代码从20到30还是版本代码从20到21?
我正在为64位mips机器使用gcc编译器。我注意到生成的一段汇编代码很有趣。下面是详细信息: 通常,bnez将立即跳到0xb0。但在0xb0之后的块中,我确信程序必须使用a1作为参数。但是我们可以看到,在0xb0之后,a1从未出现在块中。 但是a1在0x58中使用,就在bnez(0x54)之后。 那么0x54和0x58指令有可能同时执行吗?超标量处理器通过同时将多条指令分派到处理器上的冗余功能单
问题内容: 我想知道Java如何处理以下情况: 假设我有一个名为Debug的类,它看起来像这样: 并假设我的代码有一个看起来像这样的调用: 我有几个问题: 如果 isAssertEnabled 标志设置为 false ,是否将整个对Debug.assertTrue的调用编译出来?请注意,仅在调用函数后才检查isAssertEnabled == true。 如果整个调用确实被编译出来了,是否也意味着
0.1.3.关于本书的代码 本书旨在为读者提供一切力所能及的帮助。除非用作特殊用途,你可以在程序或者文档中随意使用本书的代码,而不必向我们申请许可。比如基于本书代码所开发的程序无需许可,而出售或以CD-ROM形式分发O'Reilly出版物中的例子则需要许可;在回答问题时引用本书的例子不需要许可,而在产品的文档中大量引用本书的例子则需要许可。 我们鼓励保留出处信息,但不强制。通常出处信息可以包含书名
将和升级到和或更高版本时,我们遇到一个问题 java.lang.InternalError:无法在org.bouncycastle.jcajce.provider.drbg.drbg$urlseededsecurerandom$1上打开随机源。在org.bouncycastle.jcajce.provider.drbg.drbg$urlseededsecurerandom$1上运行(drbg.ja