不是说引用不占用内存空间吗?那下面的代码怎么解释
不是说引用不占用内存空间吗?那下面的代码如何解释?
C语言代码:
#include<iostream>
using namespace std;
void main()
{
int a=2;
int &b=a;
system("pause");
}
我反汇编看了一下:
int a=2;
001A139E mov dword ptr [a],2
int &b=a;
001A13A5 lea eax,[a]
001A13A8 mov dword ptr [b],eax
书上说引用不会另外开辟内存空间,那dword ptr [b]不是指把eax中的地址放进b指向的空间当中吗?能否请大神帮我解释一下?谢谢了
------解决思路----------------------
1. 标准是说没规定是否占用空间.
2. 作为类/结构体成员时要占
3. 作为参数/局部变量可能占可能不占, 参数是因为可能直接使用寄存器传递, 就不占"内存",
但是依然占用储存空间, 局部变量理论不占用, 但是还是看实际实现.
4. lz的例子那是因为方便调试, 编译器未作优化. 不过为什么要说"开辟内存空间", 栈空间就在那里
------解决思路----------------------
int 和 int& 一样的,都是类型。
引用在编译器看来就是非空的指针。
但是,任何变量都是有自己的空间的。
引用和引用变量是不同的概念。
------解决思路----------------------
你这是debug还是relese?改成release看一下?
------解决思路----------------------
C++ 这个东西,每个编译器都会有不同的实现。如果你不是特别关心某一个编译器在某一组编译选项下的实现的话,不需要去纠结这个问题。
任何涉及到编译器具体实现的描述,都不会适合与所有编译器的所有编译选项。
------解决思路----------------------
引用,只是不会占用除指针外的额外空间.
比如你有一个比较复杂的结构体, 大于4个字节的, 引用只需要4个字节的指针. 而传值(拷贝),你懂的
这就是引用的意义.
------解决思路----------------------
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
C语言代码:
#include<iostream>
using namespace std;
void main()
{
int a=2;
int &b=a;
system("pause");
}
我反汇编看了一下:
int a=2;
001A139E mov dword ptr [a],2
int &b=a;
001A13A5 lea eax,[a]
001A13A8 mov dword ptr [b],eax
书上说引用不会另外开辟内存空间,那dword ptr [b]不是指把eax中的地址放进b指向的空间当中吗?能否请大神帮我解释一下?谢谢了
------解决思路----------------------
1. 标准是说没规定是否占用空间.
2. 作为类/结构体成员时要占
3. 作为参数/局部变量可能占可能不占, 参数是因为可能直接使用寄存器传递, 就不占"内存",
但是依然占用储存空间, 局部变量理论不占用, 但是还是看实际实现.
4. lz的例子那是因为方便调试, 编译器未作优化. 不过为什么要说"开辟内存空间", 栈空间就在那里
------解决思路----------------------
int 和 int& 一样的,都是类型。
引用在编译器看来就是非空的指针。
但是,任何变量都是有自己的空间的。
引用和引用变量是不同的概念。
------解决思路----------------------
你这是debug还是relese?改成release看一下?
------解决思路----------------------
C++ 这个东西,每个编译器都会有不同的实现。如果你不是特别关心某一个编译器在某一组编译选项下的实现的话,不需要去纠结这个问题。
任何涉及到编译器具体实现的描述,都不会适合与所有编译器的所有编译选项。
------解决思路----------------------
引用,只是不会占用除指针外的额外空间.
比如你有一个比较复杂的结构体, 大于4个字节的, 引用只需要4个字节的指针. 而传值(拷贝),你懂的
这就是引用的意义.
------解决思路----------------------
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!