【发布时间】:2023-03-24 18:48:01
【问题描述】:
我想重构一个大型代码库以进行优化,向前推进,我想防止堆栈使用类类型。例如:
class noStack
{
int x;
// I don't want this on the stack
};
void foo()
{
noStack bar; // I want the compiler to issue a warning here.
class moreNoStack { int a; noStack b; }
moreNoStack baz; // Also warn here because baz is on the stack and contains a noStack
}
但另一方面,我希望编译器忽略这一点:
noStack g_globalNoStack; // no warning
class foo
{
noStack bar; // no warning
};
foo g_globalFoo; // no warning
void func()
{
foo* p = (foo*)malloc(sizeof(foo)); // no warning
foo* q = new foo; // no warning
}
另一方面,如果没有办法让编译器做到这一点,那么我可以反过来吗?意思是不要警告堆栈的使用,但总是警告全局实例或包含的类成员?无论哪种方式我都可以解决这个问题。
【问题讨论】:
-
我认为任何已知的编译器都不存在这样的编译器选项。除此之外,这听起来是一个非常糟糕的主意,它只会帮助引入错误,但对性能没有帮助。
-
您是否了解您的
malloc行与下面的new行不相同? -
我建议你研究 C++ 的 静态分析器。
-
@deviantfan,是的,但我不在乎这种情况。
-
我注意到你用
simd标记了这个。您是否实际上试图确保您的班级正确对齐?如果是这样,有更好的方法来做到这一点,使用编译器特定的对齐属性。
标签: c++ optimization stack compiler-warnings simd