让这个矩阵被认为是一个记忆。
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*/
编辑:删除未使用的动态内存分配(泄漏)int*int ptr=new int
,@eljay更正
你不能,你也不想。
>
您不能决定对象的位置; 运行时会这样做(间接地,操作系统也会这样做)。 它比你更善于高效地安排事情。
使用指针算术以这种方式“到达”另一个对象具有未定义的行为。 你不能像那样浏览内存空间。
人们很容易把所有的东西都看作“只是字节”,但这并不是真的(C++是一种抽象),除非您想要接受各种优化,以生成一个在相当长的时间内运行的程序,否则您必须遵守规则。
您只能使用指针算术在对象数组中导航(如果由于某种原因使用别名,则可以包括组成单个对象的char
隐式数组)。
如果您迫切需要内存局部性(因为您已经通过度量确定了您确实需要它),那么将您的对象放在一个类中,使它们在内存中大致相邻。
而且,你的榜样是坏的; 您分配了一个int
,然后丢弃指向它的指针,将指针设置为局部变量的地址,然后尝试delete
局部变量。 这里面没有任何价值(或意义)。