小编Ili*_*eit的帖子

结构中的内存布局差异

我在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)

c++ memory struct

5
推荐指数
2
解决办法
659
查看次数

MIPS和x86_64之间对象对齐的差异

我有一个使用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)

c++ x86-64 mips abi

4
推荐指数
1
解决办法
225
查看次数

字符串流定界符

我正在解析一个 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 文件(或任意分隔符)呢?

c++ string parsing stream

1
推荐指数
1
解决办法
4791
查看次数

标签 统计

c++ ×3

abi ×1

memory ×1

mips ×1

parsing ×1

stream ×1

string ×1

struct ×1

x86-64 ×1