我在C++中有以下结构
struct A {
int a;
double b;
float c;
}
Run Code Online (Sandbox Code Playgroud)
这个结构与添加了一个函数的结构之间的内存布局有区别吗?
struct B {
int a;
double b;
float c;
void foo();
}
B::foo() { //do stuff }
Run Code Online (Sandbox Code Playgroud) 我有一个使用MIPSpro编译器在SGI 64位机器上生成的二进制对象.我试图在运行RHEL 6.7的64位x86_64机器上读取这个二进制对象.对象的结构就像是
class A {
public:
A(){
a_ = 1;
}
A(int a){
a_ = a;
}
virtual ~A();
protected:
int a_;
};
class B : public A {
public:
// Constructors, methods, etc
B(double b, int a){
b_ = b;
a_ = a;
}
virtual ~B();
private:
double b_;
};
A::~A(){}
B::~B(){}
Run Code Online (Sandbox Code Playgroud)
读取二进制文件后,交换字节(由于字节顺序),我发现它b是正确的但未a对齐,表明数据与我当前的构建不对齐.
我有两个问题.首先,MIPS Pro编译器如何调整其字段以及gcc它的方式有何不同.我对继承类的情况感兴趣.其次,是否有一个选项gcc或C++可以强制对齐与MIPS的方式相同?
更新1:为了进一步说明,代码是在MIPS ABI n64上编译的.我可以访问原始的C++源代码,但我不能在MIPS机器上更改它.我被限制在x86_64上读取二进制文件.
更新2:我virtual在两台机器上的两个类中添加析构函数之前和之后运行了sizeof命令.
在MIPS和x86_64上,虚拟指令之前的输出是
size of class A: 4
size …Run Code Online (Sandbox Code Playgroud) 我正在解析一个 CSV 文件,该文件具有已知的string,int,int,double.
我正在编写一个逐行解析 CSV 文件的函数。我正在尝试设计它,使其看起来像这样:
void foo(const string& csvline){
std::stringstream csvStream(csvline);
std::string s; int i1; int i2; double d;
csvline >> s;
csvline >> i1;
csvline >> i2;
csvline >> d;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法对 CSV 文件执行此操作?
我知道如果它们之间用空格分隔,那么这将是开箱即用的。但是对于 CSV 文件(或任意分隔符)呢?