我有一个关于对象的不同版本、它们的大小和分配的问题。该平台是 Solaris 8(及更高版本)。
假设我们有程序 A、B 和 C,它们都链接到共享库 D。在库 D 中定义了一些类,我们称其为“classD”,并假设大小为 100 字节。现在,我们想为下一个版本的程序 A 向 classD 添加一些成员,而不影响现有的二进制文件 B 或 C。新的大小将是 120 字节。我们希望程序 A 使用 D 类的新定义(120 字节),而程序 B 和 C 继续使用 D 类的旧定义(100 字节)。A、B 和 C 都使用运算符“new”来创建 D 的实例。
问题是,运算符“new”什么时候知道要分配的内存量?编译时还是运行时?我害怕的一件事是,程序 B 和 C 期望 classD 分配 100 个字节,而新的共享库 D 需要 120 个字节用于 classD,如果我将它们与新库 D。换句话说,新类 D 需要的额外 20 个字节的区域可能会被程序 B 和 C 分配给其他一些变量。这个假设是否正确?
谢谢你的帮助。