我想看看内存的结构,分配给两个不同的变量。
这背后的关注点是了解内存是如何按照存储不同数据类型的顺序构建的。
如何在C ++中完成?
//how to show, whats in memory in &var1 &var2 ?
short var1 = 2;
string var2 = "bla";
答案 0 :(得分:1)
如果您使用的是MSVS,则可以打开Memory
标签并写下您要检查的地址。
您必须在调试中 - Debug
- > Windows
- > Memory
。
答案 1 :(得分:1)
如果您使用的是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
答案 2 :(得分:0)
我通常会使用以下内容:
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
)在构造函数中,并在其中恢复它们
析构函数。