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 .
DaWei's Avatar, Join Date: Dec 2006
Team Leader
That's because C doesn't have references like C++. The & is strictly an address-of operator.
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
He is using a cpp file and so the compiler is C++.
kaustubh's Avatar, Join Date: Aug 2007
Go4Expert Member
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.
rajkumar_singhalmca's Avatar, Join Date: Aug 2007
Light Poster
the pointer is very ueful when the use in the right way otherwise it can be damaged the our memory location.