This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2754-Q1:C7x 编译器以意外方式处理具有 constexpr 构造函数的类

Guru**** 2581345 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1576160/am2754-q1-c7x-compiler-handles-class-with-constexpr-constructor-in-unexpected-way

器件型号:AM2754-Q1


工具/软件:

我们为 TI C7x DSP 处理器 (C7120) 等开发软件。
我有一个关于在 C++中使用 constexpr 的问题。

您的文档说:
(请参阅 www.ti.com/.../spruiv4d.pdf 29 页、ts = 1760348901999&ref_url=https%253A%252F%252Fwww.ti.com%252F)  

“以下功能提高了性能、应尽可能使用:

•使用 const
•使用 constexpr
•按引用传递对象、而不是按值传递对象
•可在编译时与运行时计算的构造和表达式

然而、当我为一个类创建 constexpr 构造函数时、生成的针对 C7x 进行优化的代码会消耗更多的内存。
具体来说:
1、代码使用 constexpr 构造函数编译,但当这样的对象被初始化时,除了对象的内存之外,相同的量被重新分配,并使用一个密码名称(可能是指一些临时对象),例如`$P$T676美元`。  当我们从构造函数之前删除 constexpr 时、不再分配额外的内存。
2、当使用 constexpr 构造函数为自定义类创建 constexpr 成员变量时,代码会再次编译 — 但如果我们引用相同的成员变量,编译就会失败,表示我们引用了临时变量。

自定义(非 pod)类的 constexpr 对象似乎以意外的方式处理。  
我有什么问题吗? 或者、C7x 编译器在内存使用方面、使用 constexpr 构造函数或 constexpr 成员对象来处理类的效率是否低下?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于发生这种情况的一个源文件...

    当我为一个类创建 constexpr 构造函数时、生成的针对 C7x 进行了优化的代码将占用更多的内存。

    ... 请遵循文章 如何提交编译器测试案例中的指示。  如果不清楚是哪一项 constexpr 导致问题的原因、请添加类似于的注释 /*此处有问题*/

    谢谢。此致、

    -乔治