内存分配器正确对齐(&P)。。。[英] memory allocators & proper alignment...

问题描述

以下是有关我正在研究的 C++ 分配器原型的一些信息:

http://groups.google.com/group/comp....eee1f61fdbb52c

任何用于计算任何正确对齐的行之有效的技术
C++ 类型的用户可以扔吗?对于初始代码,我假设
对齐(T)== sizeof(T)......现在我已经非常接近能够
放开这个东西,我想把这个松散的一端缝合起来.

我处理过的所有分配器总是被实体使用
是库实现的私有...任何他们只需要对齐
二级缓存线边界上的结构.所以,我不需要对齐
类型,我只对齐缓存行.

现在我需要弄清楚如何正确对齐任何 C++ 类型 a
用户可以想出...

救命!
:^)

--
克里斯·M·托马森
http://appcore.home.comcast.net

推荐答案

"Chris Thomasson"<cr*****@comcast.net 在留言中写道
新闻:mJ******************************@comcast.com...
以下是关于我正在研究的 C++ 分配器原型的一些信息:

http://groups.google.com/group/comp....eee1f61fdbb52c
[...]
现在我需要弄清楚如何正确对齐任何 C++ 类型
用户可以想出...
我想我会在今天或明天继续发布代码.


Chris Thomasson 写道:
以下是关于我正在研究的 C++ 分配器原型的一些信息:

http://groups.google.com/group/comp....eee1f61fdbb52c
任何用于计算正确对齐的行之有效的技术
用户可以扔给它的任何 C++ 类型?对于初始代码,我是
假设alignment(T) == sizeof(T)...现在我离
能放出这个东西,我就想把这个缝合起来


我工作过的所有分配器总是被实体使用
它们是库实现私有的...任何他们只需要的
对齐二级缓存行边界上的结构.所以,我不需要
为了对齐类型,我只对齐缓存行.

现在我需要弄清楚如何正确对齐任何 C++
用户可以想出的类型...

救命!
:^)
在标准 C++ 中没有可靠的方法来计算它.我记得
阅读几乎总是有效的技术.这篇文章好像
描述其中一个(虽然它对我来说没有任何铃声).

http://www.monkeyspeak.com/alignment/

约翰

5 月 17 日上午 11:02,"Chris Thomasson"<cris...@comcast.net 写道:
"克里斯托马森"<cris...@comcast.net 在消息中写道

新闻:mJ******************************@comcast.com...
以下是我正在研究的 C++ 分配器原型的一些信息:
http://groups.google.com/group/comp..../thread/beeee1...

[...]
现在我需要弄清楚如何正确对齐任何 C++ 类型
用户可以想出...
一种方式:
模板<typename T>
struct alignof_static
{
结构 Helper1 { T v;};
结构 Helper2 { 字符 c;助手1诉;};

static const unsigned value = sizeof(Helper2)-sizeof(Helper1);
};
模板<typename T>
无符号 alignof()
{
return alignof_static<T>::value;
}

#ifdef __GNUC__
结构 X
{
一个;
} __attribute__ ((对齐 (8)));
#其他
typedef int X;
#endif
#include <iostream>
int main()
{
std::cout <<alignof<char>()<<"\n";
std::cout <<alignof<short>()<<"\n";
std::cout <<alignof<int &>() <<"\n";
std::cout <<alignof<char &>()<<"\n";
std::cout <<alignof<X>()<<"\n";
}


本文地址:https://www.itbaoku.cn/post/1050404.html