分配给变量(例如int i = 5)的任何值以十六进制形式存储在内存中的某个地址处。 那么与存储相关的变量名称(i)会在内存中转换为ASCII码吗?标识如何存储在内存中?
回答
我不能对Java说话的内存只是一个普通的分配。
在C中,可变标识符(通常)不保留在所生成的机器代码。相反,你会(通常)看到通过寄存器的偏移量引用的对象。
例如,在我的系统,给定的源极线
i = 5;
我的编译器生成的机器代码
movl $5, -4(%rbp)
%rbp
是基指针寄存器 - 它存储的基地址一个堆栈帧,它包含函数参数(如果有的话),局部变量(如果有的话)的空间和下一个指令的地址函数调用。在我的系统中,局部变量存储在基指针寄存器(负偏移)中的值“下方”,而函数参数存储在“上”(正偏移)处。与函数参数或变量关联的标识符根本不被保留。
是的,Java存储的东西。
答:
运行时知道输入的一切是因为几乎所有的东西都是一个对象,每个对象有一个名为“的getClass()”方法,这将返回对象的类型。
,当一个对象被传递到Java中的方法的装置,所述参数类型是已知的,并且还对象的类型是太已知的。这意味着要确定它是否是一种有效的类型是很容易的。
INT在Java不是一个对象,但该类型的信息在两个仍然存在的方法int参数,并很容易检查它们是否匹配。
一个4字节串与32位整数的例子是在C语言的有效足够点,但不是在Java中,其中字符串是由被简单地给定长度的字符数组抽象出来。字符串是在Java对象,而不是像C.
但是Java不存储(本地非成员)变量本身的名称。 – Cornstalks
@Cornstalks它的确如此,但并不符合您的期望。类文件*可以包含一个LocalVariableTable(但不是运行所必需的,可以省略),它描述了哪个索引(内存地址的排序)具有哪个变量名称和类型(因为索引可以在一种方法中用于不同的局部变量)https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.13 –
标识符名称不保留在编译后的汇编文件。它们在编译期间保持在称为Symbol Table的数据结构中,该数据结构将每个标识符与关于其声明和存储器地址分配的信息相关联。
在编译过程中,为标识符分配一个内存地址,然后使用分配给进程的内存堆栈的基址指针的偏移量来访问内存地址。
- 1. 矩阵如何存储在内存中?
- 2. 整数如何存储在内存中?
- 3. 如何使用视频内存作为标准内存存储?
- 4. 如何在数据库中存储开放标识号?
- 5. 如何在Db中高效地存储AWS机器标识
- 6. Android,如何将图像存储在内部存储器中?
- 7. 如何将POJO的内容存储在偏好存储中?
- 8. 在类中存储内存内容 - C++
- 9. 在页面加载时将图像标识存储在本地存储中 - AngularJS
- 10. 如何在MB中计算可用内部存储器内存?
- 11. 如何存储在存储过程中
- 12. 如何在FlashBuilder中存储GPS坐标?
- 13. 如何将图片保存在内存中(不在内部存储)
- 14. 如何在id已被使用时存储div的标识?
- 15. Arduino中的内存存储
- 16. 如何在点击后将图像存储在内存中?
- 17. 空字符串(“”)如何在Java中的内存中存储?
- 18. IEnumerable如何在c#中的内存中存储?
- 19. 如何存档Azure blob存储内容?
- 20. 如何将标签值存储在本地存储中以及如何从本地存储中获取?
- 21. 如何让文件存储在内置的外部存储
- 22. Android:如何在内部存储器上存储数据?
- 23. PHP/MySQL:存储项目标识
- 24. 存储INI文件在内存中
- 25. 在内存中存储大型地图
- 26. 将文件存储在内存中
- 27. 存储在内存中的变量
- 28. 存储在MobileSafari内存中的密码
- 29. Python:将令牌存储在内存中
- 30. mysql临时表存储在内存中?
不确定您是在询问Java还是C,但在这两种情况下答案都是_no_。 –
“* ...采用十六进制形式... *”编号值使用位以二进制形式存储。所有数据都使用位进行存储,这只是二进制的物理实现。十六进制对程序员来说只是一个方便的数字系统。 – Cornstalks
[当你说'int i = 5;'](https://godbolt.org/g/VxKtUu)时,你的电脑实际上正在做这件事。它分配一小块内存并为其分配值5。从人类可读代码(本例中为C)转换为机器可读代码(本例中为x86_64)时,该变量的名称完全丢失。有些语言支持[反思](https://en.wikipedia.org/wiki/Reflection_(computer_programming)),所以(取决于语言)可能会在运行时提供有关特定变量的某些信息。但C不支持反射。 – Cornstalks