0

2 つの異なる変数に割り当てられたメモリの構造を確認したいと思います。
この背後にある注意は、さまざまなデータ型を格納する順序でメモリがどのように構造化されているかを理解することです。

C++ ではどのように行われますか?

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

3 に答える 3

1

MSVS を使用している場合は、Memoryタブを開いて、調べたいアドレスを書き込むことができます。

あなたはデバッグにいる必要があります - Debug-> Windows-> Memory

于 2012-04-23T07:46:57.670 に答える
1

Eclipse を使用している場合は、デバッグ パースペクティブでメモリ ビューを使用できます。

それか、単に変数へのポインターを作成し、それらの内容を調べます。

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

char* pVar1 = (char*)&var1; //point to memory storing var1
char* pVar2 = (char*)&var2; //point to memory storing var2
于 2012-04-23T07:56:43.113 に答える
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 ) ;
    }
}

IOSaveflagsコンストラクターでフォーマット状態 ( 、 fillおよび)を保存precisionし、デストラクターでそれらを復元する単純なクラスです。

于 2012-04-23T08:54:03.483 に答える