我一直在努力学习字符串以及它们在C ++中如何在内存中构建。 我只是想知道是否有办法获取内存地址并找出它是什么类型的数据?
或者也可以选择一个班级并进行“逆向工程”,以找出该班级的其他类型?以及它们存储在内存中的顺序。
我只是问这个问题,因为我只是在试图了解它们时一直在搞乱字符串,并且惊讶于它们是28字节并且想知道它是由什么构成的。 虽然我很想知道是否只有一种通用方法可以用于任何类或类型,而不仅仅是字符串。
答案 0 :(得分:0)
我只是想知道是否有办法获取内存地址并找出它是什么类型的数据?
不是真的。
在Van Neumann机器中,存储器位置的含义取决于正在执行的指令。
任何给定的字节序列都可以解释为字符串,整数,浮点值或甚至是指令。
在虚拟内存系统中,有提示。内存页面可以是只读/读写或执行/不执行,可以提供有关使用情况的提示。
答案 1 :(得分:0)
C ++中有很多东西,或者任何编译语言都被称为“特定于实现”,这在某种意义上意味着“任意”,在另一种意义上意味着“没有你的业务”。
就内存而言,字节是字节,它们有值,但除非你有指针或引用,否则你真的无法推断出你正在看的内容。 C ++确实有Runtime Type Information或RTTI可用于某些事情,但不能用于其他事情。
如果您对字符串或任何类的组成方式感到好奇,那么您需要深入了解您正在使用的标准库实现,尽管此代码通常非常古怪且令人费解,性能更高按优先级而不是可读性。
像Ruby这样的语言可以很好地保存存储在内存中的可以向后工作的索引,但是C ++就是这样的。很多这些信息都是以性能的名义故意丢弃的,编译器可以并且将根据它的使用方式优化大部分信息。这意味着你所设想的许多东西显然都会变得非常朦胧和困惑。