-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
38 lines (19 loc) · 1.13 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include "ImGuiFiles/imgui.h"
// TURN OFF ALL LINK-TIME-OPTIMIZATION (OFF BY DEFAULT)
// ON MY SYSTEM ON MSVC LARGE translationunit.cpp ENDS UP BEING 9MB
int function_from_another_obj_file();
int main()
{
std::cout << function_from_another_obj_file();
// CALLING A FUNCTION DEFINED IN ANOTHER TRANSLATION UNIT, DOESN'T PLACE THE ENTIRE OBJ FILE INTO EXECUTABLE LIKE WHAT EVERYONE SAYS HAPPENS
//ImGui::CreateContext(); // UNCOMMENTING THIS INCREASES EXECUTABLE SIZE FROM 34KB TO 58KB
//ImGui::NewFrame(); // UNCOMMENTING THIS INCREASES EXECUTABLE SIZE FROM 58KB TO 180KB
// CONCLUSION: THE ENTIRE OBJ FILE (ALL SYMBOL DEFINITIONS) ARE NOT PUT INTO THE EXECUTABLE BY DEFAULT. IT'S NOT ALL OR NOTHING
// THIS IS WITHOUT FUNCTION-LEVEL LINKING OR LINK-TIME-OPTIMIZATION ENABLED, THIS IS BY DEFAULT
// EXACTLY THE SAME THING HAPPENS WITH THE MSVC OR THE CLANG TOOLCHAIN
// ie., calling function_from_another_obj_file DOESN'T PULL IN THE ENTIRE OBJ FILE
// UNCOMMENTING THE FIRST FUNCTION CALL GROWS THE EXECUTABLE A LITTLE
// UNCOMMENTING THE SECOND FUNCTION CALL GROWS THE EXECUTABLE A LITTLE
return 0;
}