设计可变存储的内存块
Designing Memory block for variable storage
这个问题的灵感来自可变存储的Python
内存管理技术。我想用C语言实现一个类似的功能。
在一个大型运行程序中,大多数变量的值通常为0
和1
。假设数据类型int
的100个变量的值为0
或1
,因此我们使用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]
这里a
、b
和c
指向节点[0,3]
。i
和j
指向节点[1,2]
,依此类推。现在,我如何覆盖内存分配的变量在C
和实现我自己的算法这样做,如上所述?C++
提供这样的功能吗?
UPDATE:如果我们更改a = 9
,则创建一个新节点为[9,1]
,前一个节点更改为[0,2]
。当引用计数达到0
时,将取消分配。
您必须自己实现这个,并且它不是透明的。你的变量将不再是int
s,而是指向某物或其他东西的指针。
另外,请注意,在您的示例中,如果更改a
, b
和c
也会更改。
如果您不知道数据的性质,那么您必须编写一种算法,按照您所描述的方式,以特定的方式动态分配数据。
或者您知道编译时数据的性质,然后您可以决定以您喜欢的方式分配它。"重写C分配变量的方式"没有任何意义,因为让程序在运行时计算编译时自己需要的分配是没有意义的。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 具有内存顺序的原子负载存储
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 可用存储空间会消耗更多剩余内存吗?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 将数据存储在内存中以供以后访问
- 英特尔将指令存储在重叠的内存区域
- 关于矢量内存存储
- 如何使一个线程中的内存存储"promptly"在其他线程中可见?
- c++中用于常量数据的内存存储
- 内存存储可以在 OoOE 处理器中真正重新排序吗?
- 动态分配的内存存储说明
- 在 std::vector 中存储指针会破坏连续内存存储的优势
- #定义指令内存存储
- 跨语言的内存存储