具有查找表的可选帮助的对象查找,如果未使用,则必须对其进行优化
Object lookup with optional help of a lookup table which must be optimized away if unused
我想通过添加一个可选的查找表来加快Cortex-M4应用程序中那些大量使用的字体的字形查找。我现在拥有的是——简化的和伪的——这个:
在fontname-font.cpp中:
static const uint8_t someFont = {
headerbytes[knownHeaderSize],
glyph[knownGlyphCount]
};
每个字形的大小取决于字形。有些基本上是空的(例如空格),有些更大(如"M")。每个字形的大小都存储在字形的头部中,因此我可以循环浏览字体,并找出代码为code
的字形的起始偏移量(someFont[offset]
)。
在fontname-map.pp:中
static const uint16_t someFont_lut[knownGlyphCount];
所以如果包括LUT,我可以使用CCD_ 3。
如何在提供方便界面的类中组合字体和可选LUT?在我看来,将信息拆分为两个文件已经是个坏主意了(不过我可以改变这一点),但即使它们在同一个文件中,我如何设计一个允许可选使用LUT的类,并允许在不使用LUT时对其进行优化?
我想将应用程序接口简化为
Glyph Font::operator[](const char& c);
其中CCD_ 4可以仅仅是指向存储在闪存中的字形的指针或者可以用于从闪存检索字形数据的代理对象。LUT的存在和使用应隐藏在该运算符后面。
我正在使用gcc,建议可能是针对gcc的。哪些字体应该包含LUT在编译时是已知的。
添加:我希望该解决方案能防止我将一种字体的字形与另一个字体的LUT混合。如果要使用LUT,我想指定,而不是。字体读取类必须自己找到它。
使用您的规范,您只需要编写共享同一接口的两个字体类。一个使用慢速"运算符[]",另一个构建提供快速"运算符[]"的LUT。使用字体的函数需要根据字体类型进行模板化。
如果您只使用非常小的字体子集,您甚至可以创建一个模板类,使用字符地址和查找表作为模板参数。在这种情况下,使用字体的函数将为使用它们的每个字体单独编译,但字体数据结构的地址可以内联到使用字体的功能中。
由于模板解决方案甚至允许您将上一节中描述的"固定"字体与"动态"字体混合,其中被调用的函数获得指向字符数据或字符数据的数据结构("动态字体"类)的指针,以及可选的LUT。
如果您的主要问题是如果您的代码不使用LUT,则不链接LUT:只需将所有fontname-xxx.cpp文件编译为单独的对象文件,然后将它们放入静态库。当您使用该库时,编译器只选择您在应用程序中引用的对象。
- 正在查找文档以获得PS4平台的C++中的设备信息
- 空基优化子对象的地址
- 在C++中查找文件
- 优化在 Z^3 中查找邻居
- 我应该保留这个函数来查找第 n 个素数还是可以优化?
- 优化在网格图中查找哈密尔循环的函数?
- 优化查找特定斐波那契数的算法
- 具有查找表的可选帮助的对象查找,如果未使用,则必须对其进行优化
- 优化算法以查找满足某些属性的六位数字的数量
- 优化我的代码以查找给定整数的因子
- 递归查找优化
- 如何优化无序映射查找
- 优化多目标的A*路径查找
- C++路径查找与a星,优化
- 从可执行文件中查找编译优化标志
- 为查找优化的哈希映射
- 优化头痛 - 从查找表中删除 if
- 使用c++优化了在NxN数组中查找M个最大元素的方法
- 使用正确的优化算法C++在三维空间中查找点之间的距离
- 优化弱符号查找