腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
文章/答案/技术大牛
搜索
搜索
关闭
发布
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
(9999+)
视频
沙龙
1
回答
为什么
CPU
不能直接访问不是总线宽度倍数的地址?
、
、
、
、
为了理解在Linux x86环境下C语言中结构填充是如何工作的,我读到
对齐
访问比错误
对齐
访问更快。虽然我理解其中的原因,但它们似乎都有一个基本的前提假设,即
CPU
不能直接访问非总线宽度倍数的地址,因此,例如,如果32位总线
CPU
被指示从地址"2“开始读取4个
字节
的内存,它首先从地址"0”读取4个
字节
,屏蔽前两个
字节
,从地址"4“读取另4个
字节
,屏蔽最后两个
字节
,最后结合两个结果,而不是一次读取4
字
浏览 9
提问于2022-11-28
得票数 0
回答已采纳
2
回答
为什么128位变量应该与16
字节
边界
对齐
、
、
、
、
我的理解是
CPU
不能访问任意地址。
CPU
可以访问的地址是其数据总线宽度的整数倍。为了提高性能,变量应该从这些地址开始(
对齐
),以避免额外的内存访问。
对齐
到4
字节
边界的32位变量将自动
对齐
到8
字节
(64位)边界,这对应于x86 64位数据总线。但是为什么编译器要将128位变量与16
字节
边界
对齐
呢?不是8Byte边界?让我说得更具体一些。编译器使用变量的长度来
对齐
它。例如,如果一个变量的长度为256位,编译器会将
浏览 1
提问于2013-05-23
得票数 5
回答已采纳
4
回答
为什么数据结构
对齐
对性能很重要?
、
、
、
有没有人能给我一个简短而可信的解释,解释为什么编译器为了
对齐
其成员而向数据结构添加填充?我知道这样做是为了让
CPU
能够更有效地访问数据,但我不明白为什么会这样。如果这只与
CPU
相关,为什么双4
字节
在Linux中
对齐
,而在Windows中8
字节
对齐
?
浏览 5
提问于2010-01-05
得票数 30
回答已采纳
1
回答
arm的
字节
对齐
数?
、
、
、
我正在用gcc- arm -none-eabi在手臂皮质
cpu
上编程C。我知道这是4
字节
对齐
测试和谷歌。 但是,是否有任何宏或变量来定义它是多少
字节
对齐
?我需要知道,万一有一天,这个程序可能是另一个
cpu
的端口。
浏览 1
提问于2016-05-30
得票数 0
回答已采纳
1
回答
为什么在大多数处理器体系结构中使用自然
对齐
而不是处理器字
对齐
?
、
、
、
、
类似的例子可以在64位处理器中看到,16
字节
大小的数据类型(Int128)的
对齐
为16,而保持与处理器字大小相等的
对齐
(即64位处理器中的8
字节
长)是有益的。我的猜测是,创建这一自然
对齐
标准是因为当数据直接从有线读取时,机器可以默认为自然
对齐
,而不必根据数据发件人的
CPU
结构处理同一数据类型的不同
对齐
。当数据结构的所有字段都存储在一个
CPU
字中时,由于自然
对齐
,它们在内部仍然有填充,而我认为当所有字段都存储在一个<e
浏览 7
提问于2022-02-05
得票数 0
4
回答
机器代码
对齐
、
、
、
、
我正在尝试理解机器代码
对齐
的原理。我有一个汇编器实现,可以在运行时生成机器码。我在每个分支目标上都使用16
字节
对齐
,但它看起来不是最佳选择,因为我已经注意到,如果我删除
对齐
,有时相同的代码运行速度会更快。我认为这与缓存线宽度有关,因此一些命令会被缓存线切割,因此
CPU
会因此而停滞。因此,如果在一个位置插入一些
字节
对齐
,它将把指令移动到另一个地方,进一步通过高速缓存边界线...我希望实现一个自动
对齐
程序,它可以将代码作为一个整体进行处理,并根据
C
浏览 0
提问于2011-03-07
得票数 4
6
回答
CPU
和数据
对齐
、
、
、
为什么数据必须
对齐
(2
字节
/4
字节
/8
字节
边界)?我怀疑
CPU
何时有地址线Ax Ax-1 Ax-2 .因此,A2 A1 A0很有可能顺序地处理内存位置。那么,为什么需要在特定的边界
对齐
数据呢?如何在编译代码和生成可执行文件时找到
对齐
需求? 例如,如果数据
对齐
为4
字节
边界,这是否意味着每个连续
字节
位于模4偏移处?我怀疑如果数据是4
字节
对齐
的,这是否意味着如果一
浏览 11
提问于2010-06-11
得票数 18
回答已采纳
1
回答
为什么访问非自然
对齐
的内存效率不高?
、
让我们假设我们有一个64位的
cpu
,它总是一次读取8
字节
的内存,我想存储一个4
字节
的int。根据自然
对齐
的定义,将一个4
字节
的对象
对齐
到一个4的倍数的地址(例如0x0000,0x0004)。据我所知,由于
CPU
将始终读取8
字节
数据,因此从地址0x0000读取仍然可以一次性获得存储在0x0001的int。那么,为什么在这种情况下需要自然
对齐
呢?
浏览 4
提问于2021-11-03
得票数 0
2
回答
自定义分配器和内存
对齐
、
、
、
、
在分配了一个内存块之后,我想知道在块中的每个对象之间需要多少填充来优化
cpu
读写。我不确定地址
对齐
是否应该被分割 因此,根据这个答案,看起来地址
对齐
应该被sizeof(T)整除。关于
浏览 0
提问于2020-05-07
得票数 2
2
回答
为什么有大于4的
对齐
边界?
、
我不明白的是,为什么我们必须在大于4
字节
的边界上
对齐
内存中的数据,因为所有其他边界都是4的倍数。假设一个
CPU
可以在一个周期中读取4个
字节
,那么如果数据大小为8
字节
,而在4
字节
/8
字节
/ 16
字节
上
对齐
,则性能基本没有差别。
浏览 3
提问于2014-09-04
得票数 3
回答已采纳
1
回答
如何检查内存地址是否在C++中32位
对齐
、
、
、
首先,作为这个地址空间的新手,我想知道地址的内存
对齐
是什么意思。我在谷歌上搜索了一下,但我也想在这里问这个问题,因为我发现这里的答案非常有用。我的问题的第二部分与
对齐
和编程有关:如何确定地址是否为4
字节
对齐
?我在某处读到:但我真的不知道这是如何检查4
字节
对齐
的。有人能详细解释一下吗?
浏览 0
提问于2013-10-05
得票数 22
回答已采纳
2
回答
分配器库中的每次分配开销更小
、
现在,它工作得很好,但我得到的东西是1
字节
对齐
的。它可以在x86上工作,但我听说它在其他
CPU
(控制台?)上可能是灾难性的。在x86上读写的速度也稍慢一些。我所知道的实现
对齐
内存管理的唯一合理方法是分配额外的sizeof( void *)+ (alignement - 1)
字节
,并执行指针位掩码以返回
对齐
的地址,同时将原始分配的地址保留在user-data之前的
字节
( void *
字节
,见上)。对于4
字节
对齐
,在32
浏览 2
提问于2012-12-09
得票数 0
5
回答
给定数据类型的
字节
对齐
要求是否保证为2的幂?
、
、
、
给定数据类型的
字节
对齐
要求是否保证为2的幂? 有没有什么东西可以提供这种保证,而不是“没有意义”,因为它不会与系统页面大小一致?
浏览 0
提问于2011-03-03
得票数 2
3
回答
C++存储器
对齐
、
、
所以我看到,当变量在c++中声明时,如果您想获得最佳的缓存读取,那么内存应该坚持它的自然
对齐
。should end in 0x0,0x4,0x8,0xCint b[4]; // 16 bytes 0x0 但在实践中,这些变量并不遵循“自然
对齐
”规则,一个16
字节
变量驻留在以0xC结尾的内存地址中。
浏览 5
提问于2015-07-06
得票数 5
回答已采纳
2
回答
转换不同数据类型时的内存
对齐
、
、
(int)); //good approach} 因此,当这个代码是GCC在arm架构下编译的-它导致SIGFAULT (未
对齐
内存
浏览 2
提问于2016-11-11
得票数 3
回答已采纳
4
回答
“内存是8
字节
对齐
的”是什么意思?
、
、
在一个项目中,我发现内存数据是"8
字节
对齐
“的。有人能解释一下这是什么意思吗?
浏览 0
提问于2010-05-17
得票数 39
回答已采纳
1
回答
如何在程序集中增加和访问内存粒度?
、
、
、
、
我试图了解
CPU
内存
对齐
和
CPU
内存访问粒度是如何工作的,但我有点困惑,因为我找不到
CPU
的访问粒度是什么,以及两者是如何相互作用来影响性能的。# (2) unalignedmovq start3, %rax # (4) aligned 这是否意味着(1)将导致
CPU
只从内存中读取1
字节
,或者
CPU
将读取64位内存并移动不需要的部分。(2)将导致
CPU
在地址0x0处读取,但它
浏览 1
提问于2021-01-18
得票数 0
回答已采纳
3
回答
为什么32位和64位程序的结构大小不同?
、
| b |就我个人而言,我认为无论程序是32-bit还是64-bit,结构的大小都应该是16
字节
(因为char是1
字节
,double的
对齐
是8
字节
)。为什么12程序中的大小是32-bit
字节
?
浏览 2
提问于2015-01-08
得票数 3
回答已采纳
1
回答
为什么在尝试在C中分配新内存时需要
对齐
、
当内存被占用时,有必要
对齐
吗?
对齐
代码如下:#ifdef MAXALIGN#else long l为什么在调整空间大小时需要if ((Unsigned long)ptr)%(sizeof (联合
对齐
)) != 0?
浏览 1
提问于2013-10-15
得票数 1
1
回答
在内联汇编中使用.align
、
我在一些内联ARM程序集中使用了".align 16 \n\t“,该程序集实现了一些循环,以便在16
字节
边界上
对齐
它,但是,gcc asm编译器报告说,
对齐
太大 我想在asm中为特定循环实现-falign
浏览 0
提问于2010-04-21
得票数 0
回答已采纳
点击加载更多
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
热门
标签
更多标签
云服务器
ICP备案
对象存储
云直播
腾讯会议
活动推荐
运营活动
广告
关闭
领券