gpt4 book ai didi

c - 我怎么知道从我的机器上未对齐的内存地址读取是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:11 25 4
gpt4 key购买 nike

我知道根据 C 标准,不允许执行未对齐的内存读取,因为它可能导致 SIGBUS

不过,我见过一些机器,这不是问题。

我如何知道从我机器上未对齐的内存中读取是否安全?更具体地说,我正在使用 Amazon Linux。

$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Stepping: 3
CPU MHz: 800.000
BogoMIPS: 7981.41
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7

最佳答案

重点是在大多数情况下,未对齐的访问是undefined behavior (如果您声称编写可移植且符合标准的 C 或 C++ 代码)。

未定义的行为总是 very bad ,而且它有一个令人不快的特性,有时它似乎可以工作(所以让某个程序明显工作并不能说明任何问题;它可能会在下次中断)。

实际上,在当前接受未对齐访问的机器上(可能有许多 x86_64 处理器),此类访问非常慢,因为它们使 CPU cache不开心(通过在硬件级别需要两次内存读取)。另见 this .

因此,只需避免未对齐的访问(以及其他形式的 UB,包括 buffer overflows )。尝试为标准编码,并遵循普遍的做法和智慧。在你的编译器中启用所有警告,并尽量不要得到一个。参见 this link再次获取更多建议。

关于c - 我怎么知道从我的机器上未对齐的内存地址读取是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35208568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com