Pointer and reference similar at assembly level

kaustubh's Avatar author of Pointer and reference similar at assembly level
This is an article on Pointer and reference similar at assembly level in C.
Pointer and reference maybe same at assembly level.
Try an experiment :

Code: C
# include<stdio.h>
int main()
{
  int i =90;
  int *pointer;
  int &reference = i; // Line 6
  pointer = &i; 
  return 0// Line 8
}
compile it to assembly with Microsoft c++ like this :
Code:
c:\ cl /Fa filename.cpp
or with gcc like
Code:
c:\ gcc -S -masm=intel filename.cpp
Open the asm file like c:\ notepad filename.asm

Now you can the code of i, pointer, and reference;

Code:
 Line 6
	mov	DWORD PTR _i$[ebp], 90			; int i = 90;
; Line 8
	lea	eax, DWORD PTR _i$[ebp]                  ; int &reference = i;
	mov	DWORD PTR _reference$[ebp], eax
; Line 9
	lea	ecx, DWORD PTR _i$[ebp]               ; int *pointer
	mov	DWORD PTR _pointer$[ebp], ecx    ;  pointer = &i;
you see the code for pointer is exactly same as reference .
Team Leader
16Aug2007,16:21   #2
DaWei's Avatar
That's because C doesn't have references like C++. The & is strictly an address-of operator.
Go4Expert Founder
16Aug2007,16:22   #3
shabbir's Avatar
He is using a cpp file and so the compiler is C++.
Go4Expert Member
16Aug2007,23:56   #4
kaustubh's Avatar
Quote:
Originally Posted by DaWei
That's because C doesn't have references like C++. The & is strictly an address-of operator.
Dawei i am using c++ compiler if you don't believe me see this code

Code:
#include<iostream>

int main()
{
int i =90;
  int *pointer;
  int &reference = i; 
  pointer = &i;  
  return 0;  
}
Code:
	
       mov     DWORD PTR _i$[ebp], 90			;  int i = 90

	lea	eax, DWORD PTR _i$[ebp]                  ; int &reference = i; 
	mov	DWORD PTR _reference$[ebp], eax

	lea	ecx, DWORD PTR _i$[ebp]                  ; pointer = &i;
	mov	DWORD PTR _pointer$[ebp], ecx
the code of reference is same as code of pointer.
Light Poster
25Aug2007,13:38   #5
rajkumar_singhalmca's Avatar
the pointer is very ueful when the use in the right way otherwise it can be damaged the our memory location.