请问用new操作符代替结构数组的直接定义能减小生成程序的体积吗?Why。

1 view
Skip to first unread message

IBM IntarnationalServer

unread,
Jun 24, 2009, 5:24:24 AM6/24/09
to ph4...@googlegroups.com
rt

x90x20

unread,
Jun 26, 2009, 9:21:46 AM6/26/09
to ph4nt0m
能说详细点不?一般自己直接用API就行了,不用引入静态库


在2009-06-24 17:24:24,"IBM IntarnationalServer" <ibmi...@gmail.com> 写道:
rt

200万种商品,最低价格,疯狂诱惑你

aking

unread,
Jun 27, 2009, 3:45:25 AM6/27/09
to ph4...@googlegroups.com
看是全局变量还是局部变量了
局部变量应该无所谓了,反正是在栈(stack)里的,new的话是在堆(heap)里的,也差不多。
要是全局变量的话就有区别了new < 结构数组的直接定义


2009/6/24 IBM IntarnationalServer <ibmi...@gmail.com>
rt





--
I am aking

IBM IntarnationalServer

unread,
Jun 28, 2009, 8:52:27 PM6/28/09
to ph4...@googlegroups.com
Re:
能说详细点不?一般自己直接用API就行了,不用引入静态库


       VC写的程序中有一个很大的结构体,需要定义该结构体的结构数组,数组元素很多。为了
减小生成exe文件的体积。该数组用new生成是否能实现。
      还有其他减小生成exe文件的方法吗?

Re:

看是全局变量还是局部变量了
局部变量应该无所谓了,反正是在栈(stack)里的,new的话是在堆(heap)里的,也差不多。
要是全局变量的话就有区别了new < 结构数组的直接定义

      谢谢。
      既有全局变量又有局部变量。 我做了个实验,生成exe文件的体积没有变化。
     我想这个是编译原理方面的问题。直接生成的数组没有将同体积的数据放到exe文件里面,而
是在exe文件里做了个标记,不知道这样理解对不对。谁能从这个方面解释下或者推荐一些资料?

x90x20

unread,
Jun 28, 2009, 10:55:11 PM6/28/09
to ph4nt0m
#pragma optimize("gsy", on)
#pragma comment(lib,"msvcrt.lib")
#pragma comment(linker,"/INCREMENTAL:NO /IGNORE:4078")
#pragma comment(linker,"/MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.text=x90 /SECTION:x90,EWR")
 
void *malloc(size_t size)
{
  return HeapAlloc (GetProcessHeap(),NULL,size);
}
void free (void *memblock)
{
  HeapFree (GetProcessHeap(),NULL,memblock);
}
或者也可自己定义入口点啥的..

200万种商品,最低价格,疯狂诱惑你

nEINEI

unread,
Jun 29, 2009, 5:05:30 AM6/29/09
to Ph4nt0m
文件大小的优化,可以有强制文件对齐,修改入口等,你查一下pediy里面的讨论。
至于用new 替换全局定义,个人认为是没有的,默认的静态数据定义好像是不可以超256MB,也就是你定义了全局的比如 g_struct_data
[1024 * 1024 *200 ] ; 在产生bin的时候也不会为你实际产生这样大的数据,放在数据段里, 而是在加载到虚拟的进程空间时才
分配的。 在不超过默认(不是指256MB那个)大小时,程序在使用你的g_struct_data 时,直接引用数据段中这块数据的偏移。
所以说new替换全局定义来减小程序体积是没用的,但new确实可以获得比直接定义全局数据打得多的数据。
以上个人看法不一定正确。

jinn jinn

unread,
Jul 2, 2009, 10:20:29 AM7/2/09
to ph4...@googlegroups.com
如果是数组的话效果不明显,,数组在内存分配的时候,切部分堆栈一说,都是动态分配的,还有就是在使用上windows一般都会把变量这样来处理,除非定义的常量,而且占用大量硬盘空间应该也不是MS想要的效果,

2009/6/29 nEINEI <nei...@gmail.com>
Reply all
Reply to author
Forward
0 new messages