100分问一个简单问题:关于 new 的开销
平台 Linux , 编译器 GCC;
执行下面这段测试内存开销的程序,
==================================================================================
#include <unistd.h>
#include <iostream>
using namespace std;
class A
{
public:
A( char cFlag, long lVal1, long lVal2 )
{
m_cFlag = cFlag;
m_lVal1 = lVal1;
m_lVal2 = lVal2;
}
virtual void Display() { }
private:
char m_cFlag;
long m_lVal1;
long m_lVal2;
};
int main()
{
// new 1M node
long N = 1 << 20;
for( long i = 0; i < N; ++i )
{
A *p = new A( 'a', i, i );
}
cout << "sizeof(A) = " << sizeof(A) << endl;
cout << "Finished!" << endl;
sleep(10);
// release memory
exit(0);
return 0;
}
==================================================================================
[结果]
(1) sizeof(A) = 16
(2) 监视内存,发现是 24M
[解释]
(1) 由于类中有虚函数,系统会在对象内加入一个 v_pointer,故 sizeof(A) = round_up( 9 + 4 ) = 16,
其中 round_up 为调整为 4 的整数倍;
(2) 做 new 操作时系统要记录指针,故需要额外开销 4 个字节。
[我的问题]
另外的 4 个字节的系统开销作了什么?请高手赐教,谢谢。