gpt4 book ai didi

c++ - 转换已定义(已知)内存的邻居内存

转载 作者:行者123 更新时间:2023-12-02 10:01:03 24 4
gpt4 key购买 nike

将此矩阵视为一个内存。

                                        p00 p01 p02 p03 p04 p05 p06.... p0n
p10 p11 p12 p13 p14 p15 .... p1n
. . P22 . . . .... p2n
Abstraction of the memory . . . . . . .... .
. . . . . . .... .
. . . . . . .... .
. . . . . . .... pnn
p01是存储 int的已知案例。
例如 :
int *int_ptr;
int var{42};

int_ptr = &var;

/*Working*/
现在,我想在 p02(靠近 p01)处存储一个 char,因此可以找到一个逻辑,我们可以推断出下一个起始地址( &var + sizeof(decltype(var)))
那么,如何使用指针(或引用)并将其强制转换为另一个类型(不同大小)的下一种情况?
int *int_ptr;
int i_value{42};
char c_value{'c'};

int_ptr = &var;

/*How can we store the char data juste near the int one*/
编辑:删除了@Eljay纠正的未使用的动态内存分配(泄漏) int *int ptr = new int

最佳答案

您不能,也不想。

  • 您不能决定对象的位置。运行时(以及间接地)。与您相比,有效地安排事物要好得多。
  • 使用指针算法以这种方式“到达”另一个对象具有未定义的行为。您不能像这样导航存储空间。
    试图将所有内容都视为“仅字节”是很诱人的,但这并不是真的(C++是一种抽象),您必须遵守规则,除非您想对各种优化进行裁剪,以生成可在其中运行的程序相当长的时间
    您只能使用指针算法在对象数组中导航(如果出于某种原因要使用别名,则该对象数组可以包含构成单个对象的char隐式数组)。

  • 如果您迫切需要内存局部性(因为通过测量确定您确实需要它),则将您的对象放在一个类中,以便它们在内存中大致彼此相邻。
    另外,您的示例已损坏;您分配了一个 int,然后放弃了指向它的指针,将指针设置为局部变量的地址,然后尝试对局部变量 delete进行编码。这没有任何值(value)(或意义)。

    关于c++ - 转换已定义(已知)内存的邻居内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62536929/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com