|
|
1
10
您可以使用打包记录作为对象的字段:
|
|
|
2
4
为什么不从打包的记录开始呢?它会忽略掉从Tobject下降引起的开销(轻微的)。 |
|
|
3
4
如果你非常担心几个字节(你提到了6对12),你根本不应该使用类。改为使用记录。然后,您可以使用packed来消除对齐浪费;但是,准备好接受性能冲击,因为默认的“非打包”对齐是为CPU最快的访问而设置的。 |
|
|
4
4
当然。您可以打包集合、数组、记录、对象和文件类型。请注意,使用packed会导致访问数据的速度减慢,并可能导致一些类型兼容性问题。 我在2006年的Delphi试用过。编辑器的语法检查将其标记为一个错误,但编译得很好。 根据Delphi文档,$A开关适用于类类型和记录类型。 更新: 我在Delphi6上也试过。它编译成功。如果打包的类不能在Delphi7中编译,那么您可能发现了一个bug。如果它是一个bug,那么它不太可能用embarcadero来解决它,除非它仍然出现在delphi的最新版本中,而事实似乎并非如此。 |
|
|
5
3
也许有点离题,但我以前在一些ORM框架中遇到过这种情况(2006年以前,没有记录)。假设“阶级”的东西是用石头砌成的: 提示和提示:
(*)我后来在64位fpc下重新编译了“clean”版本,它在一些较小的sizeof(pointer())之后工作,尽管存在点1和点2的缺点。 |
|
|
6
2
手动打包数据 . 每4个字节取一个基数。如果你有两个长度不是4倍的短刺,那么把它们放在一个短串中,然后读出每个刺的部分。 您需要进行更多的工程设计,手动排列所有内容,但是通过使用getter和setter,行为在类外是透明的。您可以非常接近编译器以这种方式打包的结果。 |
|
|
7
2
如果您将拥有非常多的实例,并且希望避免与单个分配相关的开销,那么您可以使用打包的记录并从类本身的外部维护它们,例如通过一个或多个大型数组分配。 然后,在类中,您只能存储一个或两个字段,以便索引到堆和偏移量中。如果只使用一个大内存块就可以摆脱,那么可以将其减少到只使用偏移量。
|
|
|
8
1
仅供参考,如果这是一个记录,那么它将是8个字节,6个字节作为压缩记录。因此,您将看到类指针的4字节开销(假设您在DelphiPre-2009中),如果打包了,就有可能回收2字节。 |
|
|
9
1
即使编写“tmyclass=class end”;该类也将从具有虚拟方法的tobject继承。 这使得
因此,如果禁用对齐,您将只赢得2个字节。 通过按字段排序,数据类型大小(在您提到的较大类中)可以消除一些对齐孔。而$A-(Delphi5)或$A1(更新版本)不起作用。Delphi7和Delphi2009都没有。 btw:在Delphi2009中,“thread.monitor”还有4个字节,将类的总大小增加到 十六 字节。 |
|
zeus · 如何在调整数组大小后保持指向动态数组的指针有效? 1 年前 |
|
|
SignalOne · 德尔福(FMX)循环参考 1 年前 |
|
|
Sascha Ott · 如何从线程调用线程的方法? 1 年前 |
|
|
user1580348 · 问题:如何在上次最小化后还原应用程序? 1 年前 |
|
tua · Delphi的TLinkLabel坏了吗? 2 年前 |
|
|
Frank.Wu · delphi:RGB到HSL不正确 2 年前 |