1

这个问题的灵感来自Python于变量存储的内存管理技术。我想用 C 语言实现类似的功能。

通常,大型运行程序中的大多数变量都有值01. 假设 100 个数据类型的变量int具有值0or 1,所以我们使用100 * sizeof(int) = 400的是内存字节。相反,我们可以将每个变量指向具有引用计数的结构,这将内存使用量减少到只有几个字节。当引用计数达到 时,该结构被解除分配0

struct var
{
    int value;
    int refCount;
}

我想要实现的是,当我定义几个int's 时,链接列表如下:

void foo()
{
    int a = 0, b = 0, c = 0;
    int i = 1, j = 1;
    int x = 7;
    int p = 5, q = 5;
}

导致以下链接列表

[Head] <-> [0,3] <-> [1,2] <-> [7,1] <-> [5,2] <-> [Tail]

这里abc指向节点[0,3]ij指向节点[1,2]等等。现在,我如何覆盖变量的内存分配C并实现我自己的算法来做到这一点?是否C++提供任何此类功能?

更新:如果我们更改a = 9,则创建一个新节点,[9,1]并将前一个节点更改为[0,2]。当引用计数达到0时,它被取消分配。

4

2 回答 2

0

你必须自己实现它,而且它不会是透明的。您的变量将不再是ints,而是指向某物或其他东西的指针。

另外,请注意,在您的示例中,如果您更改a,b并且c也将被更改。

于 2013-01-09T07:24:46.247 回答
0

要么您不知道数据的性质,那么您必须按照您的描述制定一种以特定方式动态分配数据的算法。

或者您在编译时就知道数据的性质,然后您可以决定以您喜欢的方式分配它。“覆盖 C 分配变量的方式”没有任何意义,因为让程序在运行时计算编译时自身需要的分配是没有意义的。

实现这一点的最佳方法可能是拥有一个生成 C 代码的脚本。

于 2013-01-09T07:47:56.047 回答