gpt4 book ai didi

c++ - 如果必须将对象对齐为特定类型,则计算对象的大小

转载 作者:行者123 更新时间:2023-11-28 06:51:11 25 4
gpt4 key购买 nike

C++ 标准库中是否有“sizeof if aligned as type T”。我说的是这样的:

template<class U,class T>
constexpr size_t size_of(const T& x)
{
return (sizeof(x) + sizeof(U) - 1)/sizeof(U);
}

如果我知道名称,我会很容易找到它,但搜索功能比搜索名称要难得多。

最佳答案

我不知道有任何函数提供“X 的大小,对齐调整为 U 的大小”。

不过你的计算似乎有误,我会使用:

return (sizeof(x) + sizeof(U) - 1) & ~(sizeof(U)-1);

这假设 U 的大小始终是 2 的幂。如果它不总是 2 的幂,那么您需要:

return (sizeof(x) + sizeof(U) - 1) - sizeof(x) % sizeof(U);

return ((sizeof(x) + sizeof(U) - 1)/sizeof(U)) * sizeof(U);

(您的函数以 U 为单位计算 x 的大小)

但是,如果你想“修复”结构或类的对齐方式,你可以使用属性 - 不幸的是,编译器对如何解决这个问题有不同的想法:

在 gcc 和 clang 中:

struct T { ... } __attribute__((aligned(sizeof(U))));

在 msvc 和兼容中:

__declspec( align( sizeof(U) ) )  struct T { ... }

(我不能 100% 确定 sizeof(U) 是否真的有效——您可能需要将其编码为 2、4、8、16 或其他任何值,我相信这两者都需要对齐始终是2) 的幂

关于c++ - 如果必须将对象对齐为特定类型,则计算对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com