276得票8回答
内存对齐的目的

诚然,我不太理解。假设您有一个内存单元,其内存单元字长为1字节。为什么不能在非对齐地址(即不能被4整除的地址)上通过单次内存访问访问4个字节长的变量,就像对齐地址一样?

211得票17回答
定制C++分配器的引人注目示例?

有哪些非常好的理由可以放弃使用 std::allocator 并选择自定义解决方案?您是否遇到过某些情况,其中正确性、性能、可伸缩性等是绝对必要的?有什么非常聪明的例子吗? 自定义分配器一直是标准库的一个特性,我并没有太多需求。我只是想知道这里的任何人能否提供一些令人信服的例子来证明它们的存在。

178得票3回答
"__attribute__((packed, aligned(4)))" 的意思是什么?

这是C语言。文中写到:typedef struct __attribute__((packed, aligned(4))) Ball { float2 delta; float2 position; //float3 color; float size; ...

125得票4回答
为什么结构体的对齐取决于字段类型是原始类型还是自定义类型?

在Noda Time v2中,我们将转向纳秒分辨率。这意味着我们不能再使用8字节整数来表示我们感兴趣的整个时间范围。这促使我调查Noda Time的(许多)结构体的内存使用情况,这反过来又让我发现了CLR对齐决策中的一些奇怪之处。 首先,我意识到这是一项实现决策,并且默认行为随时可能更改。我...

113得票5回答
内存对齐:如何使用alignof/alignas?

我现在使用共享内存。 我不理解 alignof 和 alignas。 cppreference 没有清晰地说明:alignof 返回 "alignment",但是 "alignment" 是什么呢?是为了对齐下一个块而需要添加的字节数吗?还是填充后的大小?Stack overflow/博客...

105得票11回答
为什么C编译器不能重新排列结构体成员以消除对齐填充?

可能是重复问题: 为什么GCC不优化结构体? 为什么C++不让结构更紧凑? 考虑在32位x86机器上的以下示例: 由于对齐约束,下面的结构体struct s1 { char a; int b; char c; char d; ch...

89得票4回答
GCC的__attribute__((aligned(x)))是否对栈变量进行对齐?

我有以下代码:#include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p...

86得票3回答
为什么GCC会在函数中加入NOP指令填充空隙?

我最近开始接触汇编语言,之前只是短暂地使用C语言。当我编译程序时:int main(void) { int a = 0; a += 1; return 0; } objdump反汇编代码中包含了指令,但是在ret后有许多nop:... 08048394 <main&g...

72得票4回答
C++11中推荐的内存对齐方式是什么?

我正在开发一个单生产者单消费者环形缓冲区实现。我有两个要求: 将单个堆分配的环形缓冲区实例对齐到缓存行。 将环形缓冲区内的字段对齐到缓存行(以防止伪共享)。 我的类大致如下: #define CACHE_LINE_SIZE 64 // To be used later. temp...

71得票7回答
对齐缓存行和了解缓存行大小

为了防止伪共享(false sharing),我想将数组的每个元素都对齐到一个缓存行(cache line)。所以首先需要知道缓存行的大小,然后为每个元素分配相应数量的字节。其次,我希望数组的起始地址也能对齐到一个缓存行。 我使用Linux和8核x86平台。第一步是如何找到缓存行的大小。第二...