Where does main function get allocated?
Clash Royale CLAN TAG#URR8PPP
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
When concerned with a memory layout for a process, all function calls within the process get a new stack-frame into the stack.
I'm not sure if this is true for main
function as it seems like main
does more things than serving as an entry-point function.
Does main
function also gets its own stack-frame upon initialization of the a new process?
If this is implementation specific details, explanation for a typical Linux implementation would be useful.
process c
|
show 5 more comments
When concerned with a memory layout for a process, all function calls within the process get a new stack-frame into the stack.
I'm not sure if this is true for main
function as it seems like main
does more things than serving as an entry-point function.
Does main
function also gets its own stack-frame upon initialization of the a new process?
If this is implementation specific details, explanation for a typical Linux implementation would be useful.
process c
1
Usually_start
is the entry point rather thanmain
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c
– Torin
Mar 16 at 14:16
1
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? Andmain
is just another subroutine, it is call by_start
.
– ctrl-alt-delor
Mar 16 at 14:35
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
@ctrl-alt-delor Ifmain
is just another subroutine, can I also say that it follows the same step withnon-main
functions when it comes to memory stack allocation?
– gnis
Mar 17 at 14:16
@JdeBP I thought it waskernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.
– gnis
Mar 17 at 14:18
|
show 5 more comments
When concerned with a memory layout for a process, all function calls within the process get a new stack-frame into the stack.
I'm not sure if this is true for main
function as it seems like main
does more things than serving as an entry-point function.
Does main
function also gets its own stack-frame upon initialization of the a new process?
If this is implementation specific details, explanation for a typical Linux implementation would be useful.
process c
When concerned with a memory layout for a process, all function calls within the process get a new stack-frame into the stack.
I'm not sure if this is true for main
function as it seems like main
does more things than serving as an entry-point function.
Does main
function also gets its own stack-frame upon initialization of the a new process?
If this is implementation specific details, explanation for a typical Linux implementation would be useful.
process c
process c
edited Mar 17 at 14:27
ctrl-alt-delor
12.5k52662
12.5k52662
asked Mar 16 at 13:59
gnisgnis
136
136
1
Usually_start
is the entry point rather thanmain
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c
– Torin
Mar 16 at 14:16
1
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? Andmain
is just another subroutine, it is call by_start
.
– ctrl-alt-delor
Mar 16 at 14:35
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
@ctrl-alt-delor Ifmain
is just another subroutine, can I also say that it follows the same step withnon-main
functions when it comes to memory stack allocation?
– gnis
Mar 17 at 14:16
@JdeBP I thought it waskernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.
– gnis
Mar 17 at 14:18
|
show 5 more comments
1
Usually_start
is the entry point rather thanmain
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c
– Torin
Mar 16 at 14:16
1
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? Andmain
is just another subroutine, it is call by_start
.
– ctrl-alt-delor
Mar 16 at 14:35
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
@ctrl-alt-delor Ifmain
is just another subroutine, can I also say that it follows the same step withnon-main
functions when it comes to memory stack allocation?
– gnis
Mar 17 at 14:16
@JdeBP I thought it waskernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.
– gnis
Mar 17 at 14:18
1
1
Usually
_start
is the entry point rather than main
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c– Torin
Mar 16 at 14:16
Usually
_start
is the entry point rather than main
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c– Torin
Mar 16 at 14:16
1
1
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? And
main
is just another subroutine, it is call by _start
.– ctrl-alt-delor
Mar 16 at 14:35
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? And
main
is just another subroutine, it is call by _start
.– ctrl-alt-delor
Mar 16 at 14:35
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
@ctrl-alt-delor If
main
is just another subroutine, can I also say that it follows the same step with non-main
functions when it comes to memory stack allocation?– gnis
Mar 17 at 14:16
@ctrl-alt-delor If
main
is just another subroutine, can I also say that it follows the same step with non-main
functions when it comes to memory stack allocation?– gnis
Mar 17 at 14:16
@JdeBP I thought it was
kernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.– gnis
Mar 17 at 14:18
@JdeBP I thought it was
kernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.– gnis
Mar 17 at 14:18
|
show 5 more comments
1 Answer
1
active
oldest
votes
Usually _start
is the entry point rather than main.
main
is just another subroutine, it is call by _start
. It gets a stack-frame, on the stack, just like any other subroutine.
However the kernel does not do as much as you may think. There is code in the process run before main (it _start
it is generated by the C compiler, but not part of the C program), that does a lot. There is even code run before exec
(before the C program runs), such as setting up stdin
, stdout
and stderr
.
The kernel may do some tricks with _start
, it can not be run like other subroutines, but it will look like it is: The kernel will set up the process as if _entry
had just been called (but it was not). If control passes back to _start
then exit
is called.
(I may have glossed over some detail, including _entry
).
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f506680%2fwhere-does-main-function-get-allocated%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Usually _start
is the entry point rather than main.
main
is just another subroutine, it is call by _start
. It gets a stack-frame, on the stack, just like any other subroutine.
However the kernel does not do as much as you may think. There is code in the process run before main (it _start
it is generated by the C compiler, but not part of the C program), that does a lot. There is even code run before exec
(before the C program runs), such as setting up stdin
, stdout
and stderr
.
The kernel may do some tricks with _start
, it can not be run like other subroutines, but it will look like it is: The kernel will set up the process as if _entry
had just been called (but it was not). If control passes back to _start
then exit
is called.
(I may have glossed over some detail, including _entry
).
add a comment |
Usually _start
is the entry point rather than main.
main
is just another subroutine, it is call by _start
. It gets a stack-frame, on the stack, just like any other subroutine.
However the kernel does not do as much as you may think. There is code in the process run before main (it _start
it is generated by the C compiler, but not part of the C program), that does a lot. There is even code run before exec
(before the C program runs), such as setting up stdin
, stdout
and stderr
.
The kernel may do some tricks with _start
, it can not be run like other subroutines, but it will look like it is: The kernel will set up the process as if _entry
had just been called (but it was not). If control passes back to _start
then exit
is called.
(I may have glossed over some detail, including _entry
).
add a comment |
Usually _start
is the entry point rather than main.
main
is just another subroutine, it is call by _start
. It gets a stack-frame, on the stack, just like any other subroutine.
However the kernel does not do as much as you may think. There is code in the process run before main (it _start
it is generated by the C compiler, but not part of the C program), that does a lot. There is even code run before exec
(before the C program runs), such as setting up stdin
, stdout
and stderr
.
The kernel may do some tricks with _start
, it can not be run like other subroutines, but it will look like it is: The kernel will set up the process as if _entry
had just been called (but it was not). If control passes back to _start
then exit
is called.
(I may have glossed over some detail, including _entry
).
Usually _start
is the entry point rather than main.
main
is just another subroutine, it is call by _start
. It gets a stack-frame, on the stack, just like any other subroutine.
However the kernel does not do as much as you may think. There is code in the process run before main (it _start
it is generated by the C compiler, but not part of the C program), that does a lot. There is even code run before exec
(before the C program runs), such as setting up stdin
, stdout
and stderr
.
The kernel may do some tricks with _start
, it can not be run like other subroutines, but it will look like it is: The kernel will set up the process as if _entry
had just been called (but it was not). If control passes back to _start
then exit
is called.
(I may have glossed over some detail, including _entry
).
answered Mar 17 at 14:40
ctrl-alt-delorctrl-alt-delor
12.5k52662
12.5k52662
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f506680%2fwhere-does-main-function-get-allocated%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Usually
_start
is the entry point rather thanmain
- seehttps://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c– Torin
Mar 16 at 14:16
1
Subroutines share a stack (They have to): If they had different stack, then which stack would we activated when a subroutine returns? And
main
is just another subroutine, it is call by_start
.– ctrl-alt-delor
Mar 16 at 14:35
This is a general C/C++ language programming question rather than a Unix & Linux one, as it applies to, and could be asked in this very form about, C/C++ language programming on a lot of platforms.
– JdeBP
Mar 16 at 17:37
@ctrl-alt-delor If
main
is just another subroutine, can I also say that it follows the same step withnon-main
functions when it comes to memory stack allocation?– gnis
Mar 17 at 14:16
@JdeBP I thought it was
kernel
that bootstraps things including memory layout upon process initialization, so UNIX & Linux was more adequate forum to ask about. C language itself doesn't have any authority over where and how it(the program itself) gets allocated/managed.– gnis
Mar 17 at 14:18