Skip
Skip

Reputation: 6531

c++ visualizing memory of variable

I would like to see the structure of the memory, allocated to two different variables.
The attention behind this, is to understand how the memory is structured in order of storing different datatypes.

How is it done in C++?

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

Upvotes: 0

Views: 1693

Answers (3)

James Kanze
James Kanze

Reputation: 153977

I usually use something like the following:

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 is a simple class which saves the formatting state (flags, fill and precision) in the constructor, and restores them in the destructor.

Upvotes: 0

GazTheDestroyer
GazTheDestroyer

Reputation: 21261

If you are using Eclipse, you can use the Memory View in the debug perspective.

Either that, or simply create a pointer to your variables and inspect the contents of those:

short var1 = 2;
string var2 = "bla";

char* pVar1 = (char*)&var1; //point to memory storing var1
char* pVar2 = (char*)&var2; //point to memory storing var2

Upvotes: 1

Luchian Grigore
Luchian Grigore

Reputation: 258618

If you're using MSVS, you can open the Memory tab and write the address you wish to inspect.

You must be in debug - Debug -> Windows -> Memory.

Upvotes: 1

Related Questions