我在Visual Studio 2008的C和C++构建环境中编写了相同的代码行,但C代码的目标文件大小为5.5kb,C++代码文件大小为6.17 kb.为什么会有这种差异?
以下是两种环境中的代码:
#include <stdio.h>
struct S
{
char c;
};
void func()
{
int i;
int j;
printf("%d", i);
}
int main()
{
struct S s;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 第一:
int *p = new int;
Run Code Online (Sandbox Code Playgroud)
第二:
class A{};
A *pa = new A;
Run Code Online (Sandbox Code Playgroud)
new和编译器如何确定何时调用构造函数?在第一种情况下,编译器不生成调用p的构造函数的代码,在第二种情况下,它生成代码来调用A的构造函数.使用哪种机制进行这样的选择?
假设我开发了一个DLL,比如1.dll使用MS visual studio 2005/2008,然后我将这个DLL链接到一个控制台应用程序,比如1.exe,在加载时(使用头文件和.lib文件)然后在DLL里面时,如果我在运行时分配内存,那么谁将堆(免费存储)分配给DLL.
据我所知,DLL使用进程的地址空间来存储数据,代码和堆栈.