Let me just hit you with this. Check this code:
const char* aChar_p = "Hello"; // (1) (2)
bool aBoolean; // (3)
int main()
{
int i = 0; // (4)
bool flag = true; // (5)
return 0;
}
Now answer this. Where in memory will (1) be stored? What about (2), and (3), and (4), and (5)?
This was another question I was faced with during my recent job interview. To be honest, I have never needed to care much about linker files and memory layout. In every project I have been in these things have already been set up long before I've entered the scene. With that said, I think it's still good knowledge to have, so let's go trough them one by one.
const char* aChar_p = "Hello"; // (1) (2)
bool aBoolean; // (3)
int main()
{
int i = 0; // (4)
bool flag = true; // (5)
return 0;
}
Now answer this. Where in memory will (1) be stored? What about (2), and (3), and (4), and (5)?
This was another question I was faced with during my recent job interview. To be honest, I have never needed to care much about linker files and memory layout. In every project I have been in these things have already been set up long before I've entered the scene. With that said, I think it's still good knowledge to have, so let's go trough them one by one.
- Variables defined at this (top) level are called global. They are accessible from anywhere in the code and has a lifespan that stretches over the entire program execution. You would say it is a static variable. Since the variable is static, you might think that adding the static keyword won't make any difference. This is however not correct, adding the static keyword to the declaration will limit the scope to the same source file. In most systems an initialized modifiable static variable is placed in the read-write data area of the data segment.
- As for (1) this data will be placed in the data area. However, since it is declared const it will probably be placed in a read-only section.
- Here we have an unitialized static variable. These are all placed in a special section of the data segment called .bss and their values are typically set to zero.
- This integer is a local initialized variable or automatic variable. Automatic variables, initialized or not, are almost for sure placed on the stack.
- See 4. The type of an automatic variable does not matter. It will be placed on the stack.
The guy who interviewed me claimed that both (1) and (3) would end up in .bss and that only (2) would end up in the data section. I believe that he was wrong and that (1) will be placed in the data section as well. What do you think?
Stay tuned for part II - find the bug(s).
Kommentarer
Skicka en kommentar