设计用于变量存储的内存块

时间:2013-01-09 07:21:35

标签: c++ c memory gcc

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

大型正在运行的程序中的大多数变量通常具有值01。假设数据类型int的100个变量具有值01,因此我们使用100 * sizeof(int) = 400个字节的内存。相反,我们可以使用引用计数将每个变量指向后面的struct,这会将内存使用量减少到只有几个字节。当引用计数达到0时,将对结构进行解除分配。

struct var
{
    int value;
    int refCount;
}

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

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时,它将被取消分配。

2 个答案:

答案 0 :(得分:0)

你必须自己实现这一点,而且不会透明。你的变量不再是int,而是指向某个或其他的指针。

另请注意,在您的示例中,如果您更改abc也会更改。

答案 1 :(得分:0)

要么您不知道数据的性质,那么您必须制作一个以特定方式动态分配数据的算法,如您所述。

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

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