我们正在考虑一种C ++设计,其中一系列类将从配置文件中自动生成。这些类非常相似,并且有一个共同的基类。班级的数量(最差情况~10000)会产生某种问题吗?
答案 0 :(得分:2)
是。在C ++实现中,每个类生成多个外部符号。这可能会导致问题。例如,在某些平台上,如果您将这些类放入共享库中,您可能会发现与符号相关的结构(如“全局偏移表”)将溢出。
答案 1 :(得分:0)
我看到一些项目达到了这种规模并仍然有效。虽然我同意最终会对课程数量进行限制,但我并不认为在使用现代编译器的现代机器上会有10,000个打破。
也就是说,这似乎是虚拟运行的一个很好的候选者 - 编写一个快速程序来吐出一堆类似于你预期目标的随机生成的类定义,然后将它们放入一个庞大的CPP文件中。运行编译器并检查意外的烟花。制作一个obj文件并尝试将其链接到某个东西。继续增加班级数,直到它破裂。
顺便说一句,我同意这听起来不像是一个很棒的设计。
答案 2 :(得分:0)
如果基类定义了大量虚拟方法,则这尤其成问题。用于v表的内存量由
给出vTableMemory = countOfVirtualMembers*countOfClasses*sizeof(void*)
也就是说,基类中定义的每个虚函数的成本都是80 kByte,它被添加到可执行文件的大小中。 这已经超出了Haswell-CPU 的L1缓存。因此,对类层次结构使用的虚函数的调用将非常昂贵。采用五个虚函数,您已经有更多数据适合二级缓存。获取20个虚函数,开始超过最后一级缓存的大小。这对性能的影响可能很严重。