We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I noticed a optimization difference between compiling a simple source code with ARM GCC in C and C++. The C++ version seems to optimize a lot less stack usage.
To demonstrate this problem, I compiled the following code with arm-none-eabi-gcc version gcc-arm-none-eabi-8-2018-q4-major-win32, first only -O2, then with -O2 -x c++ :
#include <stdio.h> #include <stdint.h> struct TestStruct { uint32_t field1; uint32_t field2; uint32_t field3; uint32_t field4; } ; struct TestStruct initStructure(uint32_t f1, uint32_t f2, uint32_t f3, uint32_t f4) { struct TestStruct myStruct; myStruct.field1 = f1; myStruct.field2 = f2; myStruct.field3 = f3; myStruct.field4 = f4; printf("Temp Address %lx", &myStruct); return myStruct; } void doStuff(struct TestStruct myStruct) { printf("f1 = %d, f2 = %d, f3 = %d, f4 = %d", myStruct.field1, myStruct.field2, myStruct.field3, myStruct.field4); } int main(void) { doStuff(initStructure(1,2,3,4)); doStuff(initStructure(11,22,33,44)); doStuff(initStructure(11,12,13,14)); doStuff(initStructure(21,22,23,24)); }
Here are link to demonstrate the problem :
https://godbolt.org/z/PGCp2y Pure C
Line 44, stack usage is
https://godbolt.org/z/7XfsQR C++
Line 37, stack usage is