小编Lig*_*rms的帖子

基于两个可能的结构的未知void指针的访问类型标志?

我目前在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指针的多种可能性?

提前致谢!

c void-pointers octree

6
推荐指数
1
解决办法
65
查看次数

Vim 命令中的反斜杠

我觉得这是一个非常愚蠢的问题,但我似乎无法在任何地方找到答案。我对 vim 还比较陌生。全新安装后,我安装了 vim-LaTeX 插件,或 vim 的 LaTeX 套件。除了有一些我不理解的命令之外,它还能正常工作。它给出了以下指令:

为此,请以可视方式选择文本的一部分,然后在可视模式下按 \ll。视觉选择的部分将保存到临时文件中,并添加当前文档的序言。Latex-Suite 然后会将焦点切换到这个临时文件并编译它

但如果我按 '\' 它什么也不做,并且双 l 将光标移动到右侧。我不明白我应该做什么,我觉得自己非常愚蠢。抱歉,如果偏离主题。

vim keyboard-shortcuts

5
推荐指数
1
解决办法
4028
查看次数

标签 统计

c ×1

keyboard-shortcuts ×1

octree ×1

vim ×1

void-pointers ×1