- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我听说过 C++ 模板上下文中的代码膨胀。我知道现代 C++ 编译器并非如此。但是,我想构建一个例子并说服自己。
假设我们有一个类
template< typename T, size_t N >
class Array {
public:
T * data();
private:
T elems_[ N ];
};
template< typename T, size_t N >
T * Array<T>::data() {
return elems_;
}
此外,假设 types.h
包含
typedef Array< int, 100 > MyArray;
x.cpp
包含
MyArray ArrayX;
和y.cpp
包含
MyArray ArrayY;
现在,如何验证 MyArray::data()
的代码空间对于 ArrayX
和 ArrayY
是否相同?
我还应该从这个(或其他类似的简单)示例中了解和验证什么?如果有任何 g++ 特定的提示,我也对此感兴趣。
PS:关于膨胀,我什至担心最轻微的膨胀,因为我来自嵌入式上下文。
补充:如果模板类被显式实例化,情况是否会发生变化?
最佳答案
您问错了问题 - 您的示例中的任何“膨胀”都与模板无关。 (顺便说一句,您的问题的答案是获取两个模块中成员函数的地址,您会发现它们是相同的)
您真正想问的是,对于每个模板实例化,生成的可执行文件是否线性增长?答案是否定的,链接器/优化器会变魔术。
编译一个创建一种类型的exe:
Array< int, 100 > MyArray;
注意生成的 exe 大小。现在再做一次:
Array< int, 100 > MyArray;
Array< int, 99 > MyArray;
等等,对于大约 30 个不同的版本,绘制生成的 exe 大小图表。如果模板像人们想象的那样可怕,那么每个唯一模板实例化的 exe 大小都会以固定的量增长。
关于C++ 模板 : Convincing self against code bloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918414/
我正在编写一个软件来检索网页,将有关它们的一些关键信息提取到一个对象中,然后将其写入 ZODB 数据库。我最终将大约 350,000 个这些对象写入了我的数据库。 在我的代码运行一段时间后,每当我向数
我是 Qt 的新手,一直在使用 Qt-Designer 生成代码来与我用 Python 编写的程序进行交互。但是,当我想使用 pyinstall 将它们编译成二进制文件时,我得到的 /dist/ 大小
我有一个关于 C++ 的面试问题,C++ 中是否由于内联函数而出现“代码膨胀”? 我知道这对模板来说是正确的,但是内联函数呢?如果是,为什么。 谢谢。 最佳答案 不幸的是,inline 关键字与内联没
二阶段查找题:是否有更综合的方式来编写此代码,即避免所有这些 using指令?类似于 using CBase;是我想要的,但不被接受。 #include template class CBase
我听说过 C++ 模板上下文中的代码膨胀。我知道现代 C++ 编译器并非如此。但是,我想构建一个例子并说服自己。 假设我们有一个类 template class Array { public:
正如我在 Effective java 中读到的那样 Bloated class hierarchies can lead to bloated classes containing many met
TLDR:通过 AJAX 将弹出组件注入(inject)然后替换到 div 会导致 jQM 在 div 之外插入自己的覆盖元素而不删除它们。 我有一个 jQM 网页,它在 ajax 调用成功时动态加载
我正在使用 Vue2 和 laravel-mix,我希望我的变量可以在全局范围内访问。我最终找到了这个: mix.webpackConfig({ module: { rules
假设您在程序中定义了一个复杂的汽车对象。该对象包含一个非常长的预定义键值对列表(wheels、engine、color、lights、amountDoors 等),每个都是零件号或零件号列表,或特定值
我在使用 Dietlibc 时收到此警告消息。是不是因为dietlibc版本的原因。我正在使用饮食0.33 我无法解决此警告,请帮助我 最佳答案 您的程序需要将 scanf 库函数添加到您的目标代码中
我是一名优秀的程序员,十分优秀!