-2

Why there is difference in the output of pointer size between the C code and the Arduino IDE

lena
  • 730
  • 2
  • 11
  • 23
  • 1
    Pointer sizes are system and binary dependent. Usually either 8 bytes or 4 bytes which looks like the case respectively in your examples. – kaylum Mar 10 '22 at 19:40
  • Yes I think that. Is there any way to make them the same size? – lena Mar 10 '22 at 19:45
  • 1
    Firstly, why would you want to make them the same size? If you have a 32 bit processor then it can't run a 64 bit binary. Some 64 bit systems can run 32 bit binaries. If you really must then you can build a 32 bit binary using the appropriate compile flags (e.g `-m32`). – kaylum Mar 10 '22 at 19:48
  • Does that mean if I run the C code on a 32-bit operating system, I will get a result similar to esp32? because the cpu of esp32 is 32-bit? – lena Mar 10 '22 at 20:02
  • 1
    Does this answer your question? [Different int sizes on my computer and Arduino](https://stackoverflow.com/questions/3294816/different-int-sizes-on-my-computer-and-arduino) – gre_gor Mar 11 '22 at 09:30

2 Answers2

1

I will simplify your problem:

In your computer:

int *int_pointer;
printf("Size of int_pointer: %d", sizeof(int_pointer)); // Output: 8

In your ESP32:

int *int_pointer;
printf("Size of int_pointer: %d\n", sizeof(int_pointer)); // Output: 4

That is the difference.

A pointer stores a memory address so its size will be (at least) the same as the size of an address in its respective processor.

  • Your computer is a 64-bit system -> The size of each address is 8 bytes -> The pointer needs to have 8 bytes to be able to store it.
  • Your ESP32 is a 32-bit system -> The size of each address is 4 bytes -> The pointer only needs to have 4 bytes to be able to store it.
KyreX
  • 106
  • 5
  • Can I increase the size of pointer in esp32? in any way ? I need the same output – lena Mar 10 '22 at 20:06
  • As far as I know, you can't. At most, you can either compile the program on a 32-bit system or force it using the option `-m` as @kaylum said. – KyreX Mar 10 '22 at 22:29
0

This stuct

typedef struct str
{  
  int* array; 
  int y;
  int z;
} str;

contains a pointer (int * array). The size of pointers depends on where the code is running. On a 32 bit machine they will be 4 bytes, on a 64 bit machine 8. There can be other sizes to (2 - pdp 11, 6 - some mainframes)

So the sizeof operator will return different values on different systems

pm100
  • 48,078
  • 23
  • 82
  • 145
  • Can I increase the size of pointer in esp32? in any way ? I need the same output – lena Mar 10 '22 at 21:27
  • @kayla the only way to make them the same - and I have no idea why you would want them the same ,its meaningless - is to run the c code that gives 16 as the output in 32 bit mode, which may be possible depending on the platform. But this is a very odd request and I suspect you are doing something EXTREMELY wrong – pm100 Mar 10 '22 at 21:44