对齐特性(C11) |
您所在的位置:网站首页 › c语言对齐特性有什么用 › 对齐特性(C11) |
对齐特性(C11)
作者:追风剑情 发布于:2020-4-14 9:45 分类:C size_t d_align = _Alignof(float); 假设d_align的值是4,意思是float类型对象的对齐要求是4。也就是说,4是储存该类型值相邻地址的字节数。一般而言,对齐值都应该是2的非负整数次幂。较大的对齐值被称为stricter或stronger,较小的对齐值被称为weaker。 可以使用_Alignas说明符指定一个变量或类型的对齐值。但是,不应该要求该值小于基本对齐值。 例如,如果float类型的对齐要求是4,不要请求其对齐值是1或2 _Alignas(double) char cl; _Alignas(8) char c2; unsigned char _Alignas(long double) c_arr[sizeof(long double)]; C11在stdlib.h库还添加了一个新的内存分配函数,用于对齐动态分配的内存。该函数原型如下: void *aligned_alloc(size_t alignment, size_t size); 第1个参数代表指定的对齐,第2个参数是所需的字节数,其值应是第1个参数的倍数。与其他内存分配函数一样,要使用free()函数释放之前分配的内存。 示例 #define _CRT_SECURE_NO_WARNINGS #include #include #include //提供CHAR_BIT的定义,CHAR_BIT表示每字节的位数 #include //C99定义了bool、true、false #include //引入alignas和alignof分别作为_Alignas和_Alignof的别名。这样做可以与C++关键字匹配 (C11特性) #include int main(int argc, char* argv[]) { /* -- 使用_Alignof和_Alignas (C11) -- */ double dx; char ca; char cx; double dz; char cb; char _Alignas(double) cz; printf("char alignment: %zd\n", _Alignof(char)); printf("double alignment: %zd\n", _Alignof(double)); printf("&dx: %p\n", &dx); printf("&ca: %p\n", &ca); printf("&cx: %p\n", &cx); printf("&dz: %p\n", &dz); printf("&cb: %p\n", &cb); printf("&cz: %p\n", &cz); system("pause"); return 0; } 标签: C语言 « UGUI—显示聊天表情 | 示例:位字段与位运算» |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |