小编Pen*_*ala的帖子

使用-funwind-tables进行编译时到底发生了什么?

来自:https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html

-fexceptions:启用异常处理.生成传播异常所需的额外代码.对于某些目标,这意味着GCC为所有函数生成帧展开信息,

-funwind-tables类似于-fexceptions,它只是生成任何所需的静态数据,但不会以任何其他方式影响生成的代码.您通常不需要启用此选项; 相反,需要此处理的语言处理器代表您启用它.

有人可以解释一下-funwind-tables"任何需要的静态数据"是什么意思.他们指的是什么数据.为什么需要生成数据?如果没有生成数据会怎么样?这些数据用于哪里?

它也说"类似于-fexception".所以我认为它也会生成帧展开信息.什么是帧展开信息?谁使用框架信息以及如何使用?

在一些SO帖子中,我读到必须使用此标志编译程序_Unwind_Backtrace才能正常工作.请解释如何_Unwind_Backtrace使用生成的信息-funwind-tables.

c c++ gcc compilation backtrace

16
推荐指数
1
解决办法
1962
查看次数

“最小对齐”和“首选对齐”有什么区别?

最近我观察到,在 Clang 9.0 上,alignof__alignof返回unsigned long long的不同值,并且在https://reviews.llvm.org/D54814上也讨论了同样的问题:

从 Clang 8.0 和 GCC 8.0 开始,在相同情况下返回不同的值alignof__alignof具体而言alignof,and_Alignof返回类型的最小对齐方式,其中 as__alignof返回首选对齐方式。

我了解类型对齐,但​​从未遇到过“最小对齐”和“首选对齐”。

有人可以帮我理解这些到底是什么以及有什么区别吗?谢谢。

c++ clang memory-alignment

5
推荐指数
1
解决办法
609
查看次数

如何在实例化时打印类类型变量的名称?

我有一个名为 Student 的类,我正在主程序中创建一个实例 Alex。创建实例 Alex 时,是否可以打印“正在创建 Alex”。如果变量名是“Joe”,它应该打印“Joe is being created”。

这是我的类定义

class Student
{
    public:
    int rollNo;
    string address;

    Student(int rollNo, string address)
    {
        this.rollNo = rollNo;
        this.address = address;
    }
    //setter , getter functions.
};
Run Code Online (Sandbox Code Playgroud)

// 在主程序中

Student Alex;
Student Joe;
Run Code Online (Sandbox Code Playgroud)

注意1:是的,我们可以在 Student 类中使用变量“name”并在实例化它时传递名称 Alex/Joe 并根据需要在构造函数中打印。但这不是我的情况。我纯粹不想传名字

c++

3
推荐指数
1
解决办法
85
查看次数

当我编译指令__atomic_add_fetch时会发生什么

我的代码调用函数__atomic_add_fetch中有一条指令。编译此代码时,出现如下编译错误

错误:未定义对'__atomic_fetch_add_8'的引用

我真的不明白为什么我在调用__atomic_add_fetch时会抛出对__atomic_fetch_add_8的未定义引用。有人可以帮我理解在编译此代码时到底发生了什么吗?

注意:我特别希望了解“内部发生了什么,将__atomic_add_fetch转换为__atomic_fetch_add_8”。不是解决编译问题的解决方案。

c++ gcc atomic clang android-x86

1
推荐指数
1
解决办法
258
查看次数

lang支持__null吗?

当我使用clang ++ 5.0版编译以下程序时,结果是

错误:函数的初始值设定项看起来不像纯说明符

extern void print(void *ptr);

#define NULL __null

class IInterface
{
public:
    virtual void method1() = NULL;
};


int main()
{
    void *ptr = NULL;
    print(ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎__null不被clang支持吗?但是stackoverflow中的一些帖子建议clang支持__null。如果是这样,我为什么会收到此错误。有人可以建议这里发生了什么吗?

链接:https//godbolt.org/z/-f3Kf9

c++ llvm-clang clang++ c++14

1
推荐指数
1
解决办法
96
查看次数

什么是__builtin_operator_new及其工作方式?

在检查libc ++代码时,我看到ndk分配器__allocate函数正在调用__builtin_operator_new,但是我在libc ++代码中找不到它的定义。

顾名思义,它是内存分配功能。但是谁来实现呢?它是由clang,gcc等编译器定义的吗?在哪里可以找到它的定义?

c++ clang libc++

0
推荐指数
1
解决办法
85
查看次数