设计可变存储的内存块

Designing Memory block for variable storage

本文关键字:内存 存储      更新时间:2023-10-16

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

在一个大型运行程序中,大多数变量的值通常为01。假设数据类型int的100个变量的值为01,因此我们使用100 * sizeof(int) = 400字节的内存。相反,我们可以用引用计数将每个变量指向后面的结构体,这样可以将内存使用减少到只有几个字节。当引用计数达到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++提供这样的功能吗?

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

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

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

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

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

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