1
37
不允许编译器优化掉全局对象。
您的代码中还发生了其他事情。
|
2
5
编译器永远不应该优化掉这样的全局——如果它这样做了,它就完全被破坏了。 |
3
2
为了构建ArthurUlfeldt,volatile告诉编译器这个变量可以在编译器知识之外进行更改。我用它来放置一个语句,以允许调试器设置一个断点。它还可以用于硬件寄存器,这些寄存器可以根据环境进行更改,或者需要特殊的序列。即串行端口接收寄存器和某些看门狗寄存器。 |
4
1
你可以使用 #pragma optimize off int globalVar #pragma optimize on 但我不知道这是否只适用于Visual Studio( http://msdn.microsoft.com/en-us/library/chh3fb0k(VS.80).aspx ) 您还可以告诉编译器不要进行任何优化,尤其是在调试时… |
5
1
您可以强制一个对象(您的类型列表)通过 部分链接 在构建完整的静态lib之前。 用 GNU linker :
因此,每当使用库的代码引用静态列表时,完整的“typebundle.o”对象将链接到生成的二进制文件中,包括type1.o、type2.o和type3.o。 在那里,一定要看看“-ur”的意思。 the manual . |
6
0
你在gdb中使用gcc吗?过去有一个问题,gdb无法在构造函数中准确设置断点。 此外,您是否使用了允许编译器在类定义中内联方法的优化级别。 |
7
0
链接时需要使用整个存档。请参阅以下答案: |
8
0
我在VS2008上有相同的设置问题。
我发现如果你宣布你和
但是,在我的例子中,这会产生很多警告,因为我必须将此类中使用的所有类也声明为dllexport。 所有优化都已关闭(在调试模式下),但这仍然是优化的。同时关闭volatile/pragma optimize。在这个类(在同一个cpp文件中)等创建的全局变量上不起作用。 刚刚发现dllexport至少需要将这些类的头文件包含在一些其他cpp文件中,从exe开始工作!所以唯一的选择是为每个类添加一个带有对某些静态成员调用的文件,并将这个文件添加到所有使用这些类的项目中。 |
9
-2
使用关键字volatile怎么样?它将防止编译器进行过多的优化。 |
glor · 如何在报价单中的r中使用全局变量 6 年前 |
Mabadai · 将一个int数组复制到另一个C++ 6 年前 |
infinite · 即使没有声明也在使用全局定义 6 年前 |
Rakesh · 全局变量值不反映在函数之间 6 年前 |
oneMoreDeveloper · Javascript全局数组声明 6 年前 |
Klayd Pro · 在c中使用本地指针调用并返回函数 6 年前 |
Rob Matthews · 为模拟信用卡应用程序颁发简单的唯一ID 6 年前 |