c++ - 什么在 C++ 中使用更多内存?一个 2 个整数或 2 个函数?

标签 c++ class memory memory-management methods

我正在为 Nintendo DS(具有 4MB 内存)使用 C++ 编写代码。我有一个按钮类,用于存储 x、y 位置和长度等数据。以下哪一项会占用更少的内存?

.

方法一,类变量length、x、y、halfPoint

Button::Button(int setX, int setY, int setLength)
{
    x = setX;
    y = setY;
    length = setLength;
    halfPoint = length/2;
}
//access variable with buttonName.halfPoint

方法二,类变量length,x和y

Button::Button(int setX, int setY, int length)
{
    x = setX;
    y = setY;
    length = setLength;
}

int Button::getHalfPoint()
{
    return length/2;
}
//access variable with buttonName.getHalfPoint()

感谢任何帮助。 (并且在实际代码中我计算了一个比半点复杂得多的位置)

最佳答案

如果有很多ButtongetHalfPoint()方法会占用较少的空间。为什么?因为成员函数实际上只是由编译器作为常规函数实现的,带有指向对象的指针的隐含第一个参数。所以你的函数被编译器重写为:

int getHalfPoint(Button* this)
{
    return this->length/2;
}

(由于名称修改,这有点复杂,但这足以解释。)

但是,您应该仔细考虑必须完成的额外计算量,以避免存储额外的 4 个字节。正如 Cameron 提到的,编译器可能会为对象添加额外的空间,具体取决于架构(我认为这很可能发生在 RISC 架构上)。

关于c++ - 什么在 C++ 中使用更多内存?一个 2 个整数或 2 个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498642/

相关文章:

c++ - Qt:QWidgets 和指针

c++ - 类中的递归函数或竞争条件?

python - 如何使用 __str__ 更改对象属性的显示方式?

java - 将子类与 Java 中的整数和其他数据关联起来

c++ - 编译时的整数值

c++ - 如何使用 :tag command in vim to toggle between . hpp 和相应的 .cpp?

java - “找不到或加载主类”是什么意思?

c - 指向 CharArray 的 IntPointer 和 C 中的类型信息

Android setBackgroundResource 导致内存不足异常

c - shm_open() 导致 No such file or directory