Привет У меня есть некоторые проблемы с размером класса/структуры Вот мой Graphnode.h, у меня только 4 vars в нем - один 16-unsigned char array, три unsigned char, я думаю размер должен быть 19. Почему это 32?C++ Класс/Структура размер
Graphnode currentNode;
cout<< sizeof(currentNode)<<endl;// why this is 32 ?
cout<< sizeof(currentNode.state)<< endl;// this is 16
Graphnode.h:
#include <stdio.h>
#include <stdlib.h>
#include <tr1/array>
//using namespace std;
class Graphnode {
public:
std::tr1::array<unsigned char, 16> state;
unsigned char x;
unsigned char depth;
unsigned char direction;
Graphnode(std::tr1::array<unsigned char, 16>,unsigned char,unsigned char, unsigned char);
Graphnode();
};
Graphnode::Graphnode()
{
int i=0;
for(i=0;i<16;i++)
{
state[i] = 0;
}
x = 0;
depth = 0;
direction = 0;
}
Graphnode::Graphnode(std::tr1::array<unsigned char, 16> _state,unsigned char _x,unsigned char _d,unsigned char _direction)
{
int i=0;
for(i=0;i<16;i++)
{
state[i] = _state[i];
}
x = _x;
depth = _d;
direction = _direction;
}
Просто для любопытства я попытался напечатать адрес разных членов вашей структуры, чтобы узнать, как/где пространство пропадает. У меня такое ощущение, что компилятор предполагает, что ваш объект должен быть выровнен с 16 байтами и добавлением дополнений в конец. Попробуйте выполнить печать: 'Graphnode g; std :: cout << (void *) & g.state << "," << (void *) & g.x << "," << (void *) & g.depth << "," << (void *) & g.direction << "\ n"; ', который должен печатать три указателя, а различия между ними скажут вам, где компилятор добавляет дополнение в этом случае. –