#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public:
};
int main()
{
A a;
int ilen = sizeof(a);
printf("ilen = %d\n", ilen); // 1
}
虽然a是一个空类,但是它的地址单元保存1字节的内容。即使是空类的对象,但是因为在内存中是有起始地址的,既然这个地址属于这个对象,该对象则必然最少能存的下一个字节。只要有内存地址,那就表示至少能存下一个字节
在这里,指的是产生一个类A的对象,这个对象所占用的内存大小为1字节
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public:
void func() {}
void func1() {}
void func2() {}
};
int main()
{
A a;
int ilen = sizeof(a);
printf("ilen = %d\n", ilen); // 1
}
结果依旧为1字节,得到结论:类中的成员函数是不占用类对象内存空间的
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public:
void func() {}
void func1() {}
void func2() {}
public:
char ab;
};
int main()
{
A a;
a.ab = 'c';
int ilen = sizeof(a);
printf("ilen = %d\n", ilen); // 1
}
得到的值仍然是1,但这次1字节的空间是char ab
的,因为char
类型恰好就是一字节。
我们可以观察内存得到这一结论,记得要为a的成员变量ab赋值a.ab = 'c';
观察得到,第一个字节的内容为c
,说明这一个字节为成员变量的字节
我们把成员变量变成int类型
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public:
void func() {}
void func1() {}
void func2() {}
public:
int ab;
};
int main()
{
A a;
a.ab = 'c';
int ilen = sizeof(a);
printf("ilen = %d\n", ilen); // 4
}
观察内存得到是63,且占据了4个字节,恰好对应。因为c的ASCII正好为63
a.ab = 15;
0x001EF8C4 0f 00 00 00 cc cc cc cc ec f8 1e 00 d3 2f b8 00 01 00 00 00 b0 ....??????..?/?.....?
0x001EF8D9 5b 6a 00 b8 6e 6a 00 01 00 00 00 b0 5b 6a 00 b8 6e 6a 00 48 f9 [j.?nj.....?[j.?nj.H?
正好对应了16进制
1 2 3 4 5 6 7 8 9 A B C D E F (10对应16)
成员变量是包含在每个对象中的,占字节的
成员函数虽然也写在类定义中,但是成员函数不占类对象的字节空间。成员函数跟着类走,跟类对象无关。
浮点数的存储?