微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++ alignas1不会影响结构的大小

如何解决C ++ alignas1不会影响结构的大小

考虑以下代码

#include <iostream>

struct alignas(1) H1 {
    uint8_t f8;
    uint64_t f64;
};

#pragma pack(push,1)
struct H3 {
    uint8_t f8;
    uint64_t f64;
};
#pragma pack(pop)

int main() {
    std::cout << "H1 " << sizeof(H1) << std::endl;
    std::cout << "H3 " << sizeof(H3) << std::endl;
    return 0;
}

输出

$ ./a.out
H1 16
H3 9

alignas(1)不会影响H1的大小,而#pragma会影响。 相反,alignas(64)实际上会增加结构的大小。

解决方法

https://godbolt.org/z/bodnG3

declare
    jdoc varchar2 (32767) := 
        '{"items": [{"NAME":"AUDI","YEAR":"2000"},{"NAME":"BMW","YEAR":"2010"}]}';
    jobj json_object_t;
    keys json_key_list;
    jarr json_array_t;
begin
    jobj := json_object_t (jdoc);
    keys := jobj.get_keys;
    jarr := jobj.get_array (keys(1));
    for ai in 0..jarr.get_size ()-1 loop
        jobj := treat (jarr.get(ai) as json_object_t);
        keys := jobj.get_keys;
        for ki in 1..keys.count loop
            dbms_output.put_line (keys(ki)||'='||jobj.get_string (keys(ki)));
        end loop;
    end loop;
end;
/
PL/SQL procedure successfully completed.

NAME=AUDI
YEAR=2000
NAME=BMW
YEAR=2010

您的程序格式错误。不允许使用<source>:3:8: error: requested alignment is less than minimum alignment of 8 for type 'H1' struct alignas(1) H1 { ^ 1 error generated. 削弱对齐要求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。