【问题标题】:Designing Memory block for variable storage为变量存储设计内存块
【发布时间】:2013-01-09 07:21:35
【问题描述】:

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

大型运行程序中的大多数变量通常具有值01。假设 100 个数据类型为 int 的变量的值是 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++ 是否提供任何此类功能?

更新:如果我们更改a = 9,则会创建一个新节点为[9,1],并且之前的节点更改为[0,2]。当引用计数达到0 时,将被释放。

【问题讨论】:

    标签: c++ c memory gcc


    【解决方案1】:

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

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

    【讨论】:

    • 因此,要求数字保持不变。
    • @zmbq:是的,变量不是int,而是指针。所以,我会在结构中包含一个新成员datatype
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 2016-05-11
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多