小编use*_*405的帖子

C/C++:如何在B树中的文件中存储数据

在我看来,将数据作为文件存储在B树中的一种方法可以使用带有结构序列(数组)的二进制文件来有效地完成,每个结构代表一个节点.因此,可以使用与使用数组创建链接列表类似的方法来连接各个节点.但后来支持的问题是删除一个节点,因为在一个巨大的文件中只删除中间的几个字节是不可能的.

一种删除方法可以是跟踪"空"节点,直到达到阈值截止,然后制作另一个将丢弃空节点的文件.但这很乏味.

从简单/效率的角度来看,是否有更好的方法来删除,甚至在文件中表示B树?

TIA,-Sviiya

c c++ b-tree file

7
推荐指数
2
解决办法
8179
查看次数

pthreads:Linux上gcc和icc之间的不一致

以下代码使用gcc(4.1.2 20080704)生成错误且不一致的输出,但使用icc(版本11.1)生成正确和预期的输出.但是当我将thread_data_array []定义从main()移动到global(紧跟在struct thread_data定义之后)时,它对两个编译器都可以正常工作.我不明白为什么这种改变应该有所不同.我想以递归方式生成线程,所以我需要从函数调用它而不是定义为全局.有人可以解释代码有什么问题吗?

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define NUM_THREADS 4

struct thread_data {
    int  thread_id;
    int  sum;
};

/* struct thread_data thread_data_array[NUM_THREADS]; */

void *p_task(void *threadarg)
{
    struct thread_data *my_data;
    int taskid;
    int sum;

    my_data = (struct thread_data *) threadarg;
    taskid = my_data->thread_id;
    sum = my_data->sum;

    printf("Thread #%d with sum %d\n", taskid, sum);

    for ( sum = 0; sum < 000000000; sum++ ) {
        for ( taskid = 0; taskid < 000000000; taskid++ ) {
            sum+=taskid;
        } …
Run Code Online (Sandbox Code Playgroud)

c linux pthreads

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

标签 统计

c ×2

b-tree ×1

c++ ×1

file ×1

linux ×1

pthreads ×1