首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

获取class占用的内存空间,该如何处理

2012-11-06 
获取class占用的内存空间C/C++ codeclass abce{public:abce(){a 3b 33.33c 你是一条虫e 1322

获取class占用的内存空间

C/C++ code
class abce{public:    abce(){        a = 3;        b = 33.33;        c = "你是一条虫";        e = 13222.55;    }public:    int a;    float b;    string c;    double e;};void main(){  abce a1;  a1.c = "虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫";}


我想得到现在main函数内a1占用了多少字节,然后我准备用memcpy拷贝到一个char指针里,把这个char指针写入到文件
下次再读取这个文件,写入到 abce这个类里面

[解决办法]
string 里包含了指针那些数据, 不能 memcpy 来保存了, 使用序列化机制吧
[解决办法]
给你写了个简单的示例,可以处理像你给出的这种简单的情况,供参考:

C/C++ code
#include <iostream>#include <string>#include <fstream>using namespace std;class abce{public:    abce(){        a = 3;        b = 33.33f;        c = "你是一条虫";        e = 13222.55;    }    unsigned int GetDataSizeSum()     {        return sizeof(a) + sizeof(b) + c.size() + sizeof(e);    }public:    int a;    float b;    string c;    double e;};int main(){    abce a1;    a1.c = "虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫";    cout << "写入文件的实例 a1 :" << endl;    cout << "a1.a:" << a1.a << endl;    cout << "a1.b:" << a1.b << endl;    cout << "a1.c:" << a1.c << endl;    cout << "a1.e:" << a1.e << endl;    cout << endl;    unsigned int size = a1.GetDataSizeSum();    char *data = new char[size];    memcpy(data, &(a1.a), sizeof(a1.a));    memcpy(data+sizeof(a1.a), &(a1.b), sizeof(a1.b));    memcpy(data+sizeof(a1.a)+sizeof(a1.b), a1.c.c_str(), a1.c.size());    memcpy(data+sizeof(a1.a)+sizeof(a1.b)+a1.c.size(), &(a1.e),sizeof(a1.e));    ofstream ofs("test.txt");    ofs.write(data,size);    ofs.close();    memset(data,0,size);    ifstream ifs("test.txt");    ifs.read(data,size);    ifs.close();        abce a2;        cout << endl;    cout << "从文件构造前的实例 a2 :" << endl;    cout << "a2.a:" << a2.a << endl;    cout << "a2.b:" << a2.b << endl;    cout << "a2.c:" << a2.c << endl;    cout << "a2.e:" << a2.e << endl;    cout << endl;    memcpy(&(a2.a), data, sizeof(a1.a));    memcpy(&(a2.b), data+sizeof(a2.a), sizeof(a2.b));    string temp(data+sizeof(a2.a)+sizeof(a2.b),data+sizeof(a2.a)+sizeof(a2.b)+a1.c.size());    a2.c = temp;    memcpy(&(a2.e), data+sizeof(a2.a)+sizeof(a2.b)+a2.c.size(), sizeof(a2.e));    cout << endl;    cout << "从文件构造出的实例 a2 :" << endl;    cout << "a2.a:" << a2.a << endl;    cout << "a2.b:" << a2.b << endl;    cout << "a2.c:" << a2.c << endl;    cout << "a2.e:" << a2.e << endl;    cout << endl;    return 0;}// 输出/*写入文件的实例 a1 :a1.a:3a1.b:33.33a1.c:虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫a1.e:13222.5从文件构造前的实例 a2 :a2.a:3a2.b:33.33a2.c:你是一条虫a2.e:13222.5从文件构造出的实例 a2 :a2.a:3a2.b:33.33a2.c:虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫虫a2.e:13222.5*/ 

热点排行