指针内存使用情况

Stu*_*123 4 c++ memory pointers

我对这些事实可能是错的,所以纠正我吧!

一个指针指向一个内存地址,如果你去了这个内存地址你会找到一个字节?指针也指向它指向的内存段的最低地址,所以如果它指向一个8字节的内存段,从0x0开始到0x7结束,它将指向0x0?

指针如何知道它指向的内存大小?因此,如果一个指针指向一个128字节大小的内存段并且指针被转换为另一种类型,那么内存段的大小会发生什么变化呢?

Lig*_*ica 8

指针如何知道它指向的内存大小?

它没有.

因此,如果一个指针指向一个128字节大小的内存段并且指针被转换为另一种类型,那么内存段的大小会发生什么变化呢?

记忆仍在那里,但是既然你丢弃了关于居住在那里的物体的唯一信息,那么,你知道.而已.你不知道.

这就是为什么人们sizeof在通过a char*对对象进行别名来获取底层字节时使用的原因:

std::ofstream os("some-binary-file");
const double d = 0.1234;

os.write((char*)&d, sizeof(double));
//                  ^^^^^^^^^^^^^^
// 
// Otherwise os.write has no way of knowing how much to write
Run Code Online (Sandbox Code Playgroud)

当然,如果你要浏览一下double*,使用该指针的每一段代码都会假定它指向一个或多个内存的"块",精确地为sizeof(double)字节宽.如果没有,那那就是你的错.

tl; dr:告诉程序它有多少指针字节是你的责任.

  • 实际上,指针的*type*是指示指针指向的字节数. (3认同)