1 const int 变量在程序运行时占据4字节的地址空间,但与普通变量不同的是它不在栈上分配
而是在静态数据区分配。其实这个消耗相对于现在的计算机配置和程序大小来说并不大。2 没有用到的话,一般的成员变量不会被编译到最终的程序中
一旦使用就会整个类都要编译到程序里3 不会4 fastcall要快一些,它把前两个变量放在寄存器中,速度上会有所提高
而是在静态数据区分配。其实这个消耗相对于现在的计算机配置和程序大小来说并不大。2 没有用到的话,一般的成员变量不会被编译到最终的程序中
一旦使用就会整个类都要编译到程序里3 不会4 fastcall要快一些,它把前两个变量放在寄存器中,速度上会有所提高
解决方案 »
- 求个SOCK5代理指定进程源码
- 菜鸟学习
- 高分求教,解决后再加分!如何控制已存在的MacromediaFlashPlayerActiveX控件!
- (高分求)界面编程原理
- 关于PCM调制的问题?很简单的!
- 圈选时的虚线框问题!
- 小问题 …… 大分数 ……
- 当在鼠标右键按下去时用GetClaaaLong改变光标
- 300份!!!!!!!!!!!!!!为什么钩不住 用vb编的应用程序 的api调用~~~~~~~~~~`
- 在同一台机器上,WIN32和WIN31程序通信的问题?
- 在资源管理器中,打开显示隐藏文件选项,用什么WINDOWS API函数可以隐藏一个文件?
- 用VC++搞软件开发学数学有必要吗?(不包括离散等)
1.单独的几个const int消耗是不大,不过如果你想想看Windows里面有多少个#define(不是自己定义的,而是在winuser.h,winbase.h这样的文件中定义的),你就不会说这个开销不大了.
其实这个问题意义并不大,但是我想#define的作用应该不是像有些人所说的完全可以用const来代替,只要不滥用,宏代换还是很好用的.
3.我昨天想到的结果应该是不完全相同,比如C和C++生成函数名称的方法就不相同,否则C++就无法实现函数重载.不过这不算个问题,我回去些个程序测试一下就行了.还是谢谢你.
4.这个问题我也去写个程序测试一下好了.从我看到的资料来看,好像cdecl应该是最慢的(个人猜测).
是不会被编译的,
比如 #define a 100
在所有用a的地方用常量100替换,这个常量还是需要内存空间的,只不过是在静态存储区中
但是#define不仅仅是当常量用的,她有很多功能是const 或 inline 所无法替代的比如# ##
其实没有什么太大的意义,如果你用vc,相信编译器的优化就是了
if (msg==0x0001)
和
const int WM_CREATE=0x0001;
if (msg==WM_CREATE)
他们生成的汇编代码应该是不相同的吧?我对汇编稍微有一点概念,汇编里面对像mov ax,0x01和mov ax,[bx]这样的效率是不同的.
对C/CPP的问题,我也知道对运行时的性能影响是微乎其微的,我并不是在乎那一点点性能,而是从技术的角度关心其中的细节而已.
不过我发现,像下面这两个程序生成的文件大小也是完全一样,这我就想不通了,我觉得第二个怎么也应该比第一个大十几个字节才对.有人能解释一下吗?我用的都是Release模式,而且Code Generation对齐到1字节.
1.void main()
{
printf("Hello,World!\n");
}
2.void func1()
{printf("This is just a test.\n"); }
void main()
{
func1();
printf("Hello,World!\n");
}
我花了不少时间去测stdcall,cdecl,fastcall的效率,可测来测去总是一样,是我的算法不行,还是ms级的精度不够?不过还是感谢各位.
你知道RAM和ROM的区别吗?const int val=0,那么var就是ROM中的数据。如果没有const 那么其就存在RAM中。
to tridust:我同意你的看法,我的问题本意是比较C和CPP在同等条件下的大小和效率,如果让CPP程序使用了异常这些功能,而C程序没有办法使用,那么这种比较就不是公平的.
又:我始终认为cdecl和stdcall应该是有性能差别的,毕竟世界上没有完全相同的两片树叶么.除非你能证明两种调用方法产生的机器指令是完全相同的,那我就死心塌地的相信你.
另外,In355HZ说exe总是对齐到4K的,从VC生成的代码来看也确实是这样,可是我昨天用Borlan C++5.02编译的程序只有7.5K!看来对齐也不是绝对的.
对一个项目来说(不是简单的HELLO WORLD),肯定c的效率要高于c++,当初Linux也曾考虑
用c++开发Linux,也是考虑到效率问题才采用C。(我认为可能更要命的可能是c++的编译
时间,Linux动不动就重新编译内核,c++肯定让人受不了)。