我目前在C中使用自己的八叉树.树将包含几十亿个对象,因此内存效率是关键.为了实现这一点,我目前使用一个带有标志和联合的结构,但我认为它不干净并且它浪费了内部节点的空间,因为我只需要一个8位标志但是为64位保留了内存指数.我的代码目前如下:
typedef struct _OctreeNode
{
uint64_t location_code;
union
{
uint8_t child_exists;
uint64_t object_index;
} data;
uint8_t type;
} OctreeNode;
Run Code Online (Sandbox Code Playgroud)
我想把它分成两个不同的结构.一个叶节点和一个内节点.如下:
typedef struct _OctreeInnerNode
{
uint64_t location_code;
uint8_t child_exists;
uint8_t type;
} OctreeInnerNode;
typedef struct _OctreeLeafNode
{
uint64_t location_code;
uint64_t object_index;
uint8_t type;
} OctreeLeafNode;
Run Code Online (Sandbox Code Playgroud)
现在问题出现在我的无序地图上,基于位置代码的哈希值.它使用void指针,因此存储两个不同的结构不是问题.我知道有可能将标志作为第一个元素并取消引用指向flag数据类型的指针来派生类型,如下所示:
typedef struct _OctreeLeafNode
{
uint8_t type;
uint64_t location_code;
uint64_t object_index;
} OctreeLeafNode;
void
func(void* node)
{
uint8_t type = *(uint8_t*)node;
if (type == LEAF_NODE) {
OctreeLeafNode* leaf_node = (OctreeLeafNode*)node;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更清洁的方式.或者这不推荐?我怎么能处理结构和void指针的多种可能性?
提前致谢!
我觉得这是一个非常愚蠢的问题,但我似乎无法在任何地方找到答案。我对 vim 还比较陌生。全新安装后,我安装了 vim-LaTeX 插件,或 vim 的 LaTeX 套件。除了有一些我不理解的命令之外,它还能正常工作。它给出了以下指令:
为此,请以可视方式选择文本的一部分,然后在可视模式下按 \ll。视觉选择的部分将保存到临时文件中,并添加当前文档的序言。Latex-Suite 然后会将焦点切换到这个临时文件并编译它
但如果我按 '\' 它什么也不做,并且双 l 将光标移动到右侧。我不明白我应该做什么,我觉得自己非常愚蠢。抱歉,如果偏离主题。