在学习C++的时候,由于编译器背着我们干了太多的事儿,所以看看那些高级数据结构在汇编级别是怎么样的,在内存中是如何的,对编写高效代码很有帮助。
下边是一个小函数,帮你打印内存中的内容。如果使用微软的编译器,各个内存对象之间可能会有byte guard,即编译器会在分配的数据对象之间插入空白bytes,便于检测破坏邻接对象,所以和教科书上的连续分配内存有些差异,注意一下就行了
以下是实现加测试代码:
#include < cstdio >
struct Test{
int a;
char b;
};
void ShowBytes( void * s, int n)
{
unsigned char * start = (unsigned char * )s;
printf( " [OFFSET] ADDRESS: VALUE/n/n " );
for ( int i = 0 ; i < n; i ++ )
{
printf( " [%.4d] %.8X: %.2X/n " , i, start + i, * (start + i));
if ((i + 1 ) % 4 == 0 )
{
printf( " ----------------------/n " );
}
} // for
}
int main()
{
Test *t;
Test a={12,'A'};
t=&a;
ShowBytes(t,8);
getchar();
return 0;
}