我想看看分配给两个不同变量的内存结构。
这背后的注意是要了解内存是如何按存储不同数据类型的顺序来构造的。
它是如何在 C++ 中完成的?
//how to show, whats in memory in &var1 &var2 ?
short var1 = 2;
string var2 = "bla";
如果您使用的是 MSVS,您可以打开Memory
选项卡并写下您要检查的地址。
您必须处于调试状态 - Debug
-> Windows
-> Memory
。
如果您使用的是 Eclipse,则可以在调试透视图中使用Memory View 。
要么,要么简单地创建一个指向变量的指针并检查这些变量的内容:
short var1 = 2;
string var2 = "bla";
char* pVar1 = (char*)&var1; //point to memory storing var1
char* pVar2 = (char*)&var2; //point to memory storing var2
我通常使用以下内容:
template< typename T >
class Dump
{
public:
explicit Dump( T const& obj ) ;
void print( std::ostream& dest ) const ;
friend std::ostream& operator<<( std::ostream& dest, Dump const& source )
{
source.print( dest );
return source;
}
private:
unsigned char const*myObj ;
} ;
template< typename T >
inline Dump< T >
dump(
T const& obj )
{
return Dump< T >( obj ) ;
}
template< typename T >
Dump< T >::Dump(
T const& obj )
: myObj( reinterpret_cast< unsigned char const* >( &obj ) )
{
}
template< typename T >
void
Dump< T >::print(
std::ostream& dest ) const
{
IOSave saver( dest ) ;
dest.fill( '0' ) ;
dest.setf( std::ios::hex, std::ios::basefield ) ;
char const* baseStr = "" ;
if ( (dest.flags() & std::ios::showbase) != 0 ) {
baseStr = "0x" ;
dest.unsetf( std::ios::showbase ) ;
}
unsigned char const* const
end = myObj + sizeof( T ) ;
for ( unsigned char const* p = myObj ; p != end ; ++ p ) {
if ( p != myObj ) {
dest << ' ' ;
}
dest << baseStr << std::setw( 2 ) << (unsigned int)( *p ) ;
}
}
IOSave
是一个简单的类,它在构造函数中保存格式化状态(和) flags
,
并在析构函数中恢复它们。fill
precision