#include <iostream>
#include <cstring>
#include <iomanip>
// 打印内存内容的工具函数
void hexdump( const void * addr, size_t len) {
const uint8_t * p = static_cast < const uint8_t * > ( addr) ;
std:: cout << "Address | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n " ;
std:: cout << "---------|------------------------------------------------\n " ;
for ( size_t i = 0 ; i < len; i + = 16 ) {
std:: cout << reinterpret_cast < const void * > ( p + i) << " | " ;
for ( int j = 0 ; j < 16 && ( i + j) < len; ++ j) {
std:: cout << std:: hex << std:: setw ( 2 ) << std:: setfill ( '0' )
<< static_cast < int > ( p[ i + j] ) << " " ;
}
std:: cout << "\n " ;
}
}
int main( ) {
// 64字节对齐的缓冲区(避免实验噪声)
alignas( 64 ) uint8_t buffer[ 32 ] ;
memset ( buffer, 0xAA , sizeof ( buffer) ) ; // 填充初始值 0xAA
// 在地址 0x6 处强制放置 int64_t(跨越 0x0~0x7 和 0x8~0xF 两个 8 字节块)
int64_t * unaligned_ptr = reinterpret_cast < int64_t * > ( buffer + 6 ) ;
* unaligned_ptr = 0x1122334455667788 ; // 写入测试值
// 转储内存,观察写入位置和总线读取行为
std:: cout << "=== 内存转储 (写入地址 0x6~0xD) ===\n " ;
hexdump( buffer, 32 ) ;
// 验证读取操作是否成功
volatile int64_t read_value = * unaligned_ptr; // volatile 阻止编译器优化
std:: cout << "\n 读取值: 0x" << std:: hex << read_value << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvbWFuaXA+CgovLyDmiZPljbDlhoXlrZjlhoXlrrnnmoTlt6Xlhbflh73mlbAKdm9pZCBoZXhkdW1wKGNvbnN0IHZvaWQqIGFkZHIsIHNpemVfdCBsZW4pIHsKICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYWRkcik7CiAgICBzdGQ6OmNvdXQgPDwgIkFkZHJlc3MgIHwgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMEEgMEIgMEMgMEQgMEUgMEZcbiI7CiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSArPSAxNikgewogICAgICAgIHN0ZDo6Y291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihwICsgaSkgPDwgIiB8ICI7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxNiAmJiAoaSArIGopIDwgbGVuOyArK2opIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0dygyKSA8PCBzdGQ6OnNldGZpbGwoJzAnKSAKICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4ocFtpICsgal0pIDw8ICIgIjsKICAgICAgICB9CiAgICAgICAgc3RkOjpjb3V0IDw8ICJcbiI7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gNjTlrZfoioLlr7npvZDnmoTnvJPlhrLljLrvvIjpgb/lhY3lrp7pqozlmarlo7DvvIkKICAgIGFsaWduYXMoNjQpIHVpbnQ4X3QgYnVmZmVyWzMyXTsKICAgIG1lbXNldChidWZmZXIsIDB4QUEsIHNpemVvZihidWZmZXIpKTsgLy8g5aGr5YWF5Yid5aeL5YC8IDB4QUEKCiAgICAvLyDlnKjlnLDlnYAgMHg2IOWkhOW8uuWItuaUvue9riBpbnQ2NF9077yI6Leo6LaKIDB4MH4weDcg5ZKMIDB4OH4weEYg5Lik5LiqIDgg5a2X6IqC5Z2X77yJCiAgICBpbnQ2NF90KiB1bmFsaWduZWRfcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4oYnVmZmVyICsgNik7CiAgICAqdW5hbGlnbmVkX3B0ciA9IDB4MTEyMjMzNDQ1NTY2Nzc4ODsgLy8g5YaZ5YWl5rWL6K+V5YC8CgogICAgLy8g6L2s5YKo5YaF5a2Y77yM6KeC5a+f5YaZ5YWl5L2N572u5ZKM5oC757q/6K+75Y+W6KGM5Li6CiAgICBzdGQ6OmNvdXQgPDwgIj09PSDlhoXlrZjovazlgqggKOWGmeWFpeWcsOWdgCAweDZ+MHhEKSA9PT1cbiI7CiAgICBoZXhkdW1wKGJ1ZmZlciwgMzIpOwoKICAgIC8vIOmqjOivgeivu+WPluaTjeS9nOaYr+WQpuaIkOWKnwogICAgdm9sYXRpbGUgaW50NjRfdCByZWFkX3ZhbHVlID0gKnVuYWxpZ25lZF9wdHI7IC8vIHZvbGF0aWxlIOmYu+atoue8luivkeWZqOS8mOWMlgogICAgc3RkOjpjb3V0IDw8ICJcbuivu+WPluWAvDogMHgiIDw8IHN0ZDo6aGV4IDw8IHJlYWRfdmFsdWUgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9