Tag: 对齐

如何在C中对齐指针

有没有办法在C中对齐指针? 假设我正在将数据写入数组堆栈(因此指针向下),我希望我写的下一个数据是4对齐的,所以数据写入4的倍数的内存位置,我该怎么做那? 我有 uint8_t ary[1024]; ary = ary+1024; ary -= /* … */ 现在假设ary指向位置0x05 。 我希望它指向0x04 。 现在我可以做到 ary -= (ary % 4); 但是C不允许模数指针。 有没有与架构无关的解决方案?

x86上的错误对齐指针

有人提供一个示例是否会因为错位而将指针从一种类型转换为另一种类型失败? 在对这个答案的评论中,两者都表示做了类似的事情 char * foo = …; int bar = *(int *)foo; 如果启用了对齐检查,即使在x86上也可能导致错误。 我在GDB中通过set $ps |= (1<<18)设置了alignment-check标志后试图产生错误条件,但没有任何反应。 工作(即非工作;))示例是什么样的? 答案中的代码片段都没有在我的系统上失败 – 我将尝试使用不同的编译器版本,稍后在不同的PC上。 顺便说一句,我自己的测试代码看起来像这样(现在也使用asm来设置AC标志和未对齐的读写): #include int main(void) { #ifndef NOASM __asm__( “pushf\n” “orl $(1<<18),(%esp)\n" "popf\n" ); #endif volatile unsigned char foo[] = { 1, 2, 3, 4, 5, 6 }; volatile unsigned int bar = 0; bar […]