c ++可视化变量的内存

时间:2012-04-23 07:46:11

标签: c++ eclipse variables memory

我想看看内存的结构,分配给两个不同的变量。
这背后的关注点是了解内存是如何按照存储不同数据类型的顺序构建的。

如何在C ++中完成?

//how to show, whats in memory in &var1 &var2 ?
short var1 = 2;
string var2 = "bla";

3 个答案:

答案 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是一个保存格式化状态的简单类(flagsfillprecision)在构造函数中,并在其中恢复它们 析构函数。