我对D2编程语言相当陌生。我需要实现四边形数据结构。这是用于有效图嵌入及其对偶的邻接数据结构。 从以C以往的经验,我开始用下面的实现: 高效四边形实现的自定义对齐选项
struct edge(T) {
edge* next;
T* data;
uint position;
}
alias edge[4] qedge;
edge* new_edge() {
qedge* q = new qedge; // does not compile, just analogous
// initialize the four edges (q[i].position = i)
return cast (edge*) q;
}
这工作正常,但这个位置字段缠着我 - 它只是浪费空间存在。 当为qedge数组分配内存时,是否有办法对齐(8 * $ {机器字大小})边界(然后我不需要额外的位置字段,因为边缘在哪个位置的信息位于qedge数组将被编码到边缘地址中)?
我的目标是实现一个高效可爱的实现(这就是为什么我选择了D),因此欢迎任何其他建议。
编辑:这里是一段代码,使事情更加清晰http://dpaste.dzfl.pl/e26baaad:
module qedge;
class edge(T) {
edge next;
T* data;
}
alias edge!int iedge;
alias iedge[4] qedge;
import std.stdio;
import std.c.stdlib;
void main() {
writeln(iedge.sizeof); // 8
writeln(qedge.sizeof); // 32
// need something for the next line,
// which always returns an address, divisible by 32
qedge* q = cast (qedge*) malloc(qedge.sizeof);
writeln(q); // ex. 0x10429A0 = 17050016, which is, does not start at 32-byte boundary
}
既然你改变边缘的一类 - 使用'new'操作。我仍然对你想要做的事感到困惑......也许一个简单的C或C++代码会使它更加清晰! :)或者,只需来IRC(服务器:irc.oftc.net,频道:#D),这样我们就可以聊天了。 – DejanLekic 2012-07-08 15:07:45