我遇到了#define他们使用的一个__builtin_expect.
文件说:
内置功能:
long __builtin_expect (long exp, long c)您可以使用
__builtin_expect为编译器提供分支预测信息.一般来说,你应该更喜欢使用实际的配置文件反馈(-fprofile-arcs),因为程序员在预测程序实际执行情况方面是非常糟糕的.但是,有些应用程序难以收集此数据.返回值是值
exp,它应该是一个整数表达式.内置的语义是预期的exp == c.例如:Run Code Online (Sandbox Code Playgroud)if (__builtin_expect (x, 0)) foo ();表示我们不打算打电话
foo,因为我们预计x会为零.
那么为什么不直接使用:
if (x)
foo ();
Run Code Online (Sandbox Code Playgroud)
而不是复杂的语法__builtin_expect?
所以我做一个小项目,其中包括使用malloc,realloc并calloc职能不时.我明白在每次分配后我应该检查它是否失败并且它指向null如下:
int* arr = malloc(size*sizeof(int));
if (!arr)
{
printf("ERROR! Not enough memory!\n");
exit(1); // to exit the program immedietly.
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以创建一个方法来为每种类型的指针执行此操作,如下所示:
void checkOutOfMemory(const void* p) //gets a pointer and exit program if points to null.
{
if (!p)
{
printf("ERROR! Out of memory!\n");
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,它到目前为止工作,但我开始怀疑是否有任何我不知道的特殊情况.