| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 788 人关注过本帖
标题:关于类实例化后内存大小的变化
只看楼主 加入收藏
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:370
专家分:910
注 册:2021-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:12 
关于类实例化后内存大小的变化
有一个疑惑,求解:



实例化类时,内存占用也会变大吗?

比如代码:  
lobject1 = createobject('myClass1') && 假设该类,存在很多自定义属性和方法,大小在 :10M
lobject2 = createobject('myClass2') && 该类 大小仅2K(很小)


这2句执行后,内存占用会受 类自身大小 而变大吗?

即lobject1 占用的内存 比 lobject2 大吗?
仅限 在编译后的EXE执行时,实例化这句后占用的内存,

提出这个疑问是因为:这个类会存在很多实例化对象,每个对象会作为参数传递给别的对象,接收这个对象的对象其实只用到参数对象中很少的属性
所以:如果内存占用很大,我就把这个类中需要用到的 几个属性 单独创建一个新类,用于参数。
如果实例化对象很小,就不拆分了。

不清楚,VFP的实例化类对象的 工作原理是啥情况



搜索更多相关主题的帖子: 参数 内存 对象 实例化 大小 
6 天前 17:19
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2153
专家分:4682
注 册:2012-2-29
收藏
得分:0 
可问一下DS
6 天前 17:44
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:344
专家分:827
注 册:2014-6-12
收藏
得分:0 
我一般情况下,功能近似,同一个exe使用的,放到一个类文件中。不同的exe之间的类文件尽量另存为其它名字。
多个不同功能的类放到同一个类文件中,后期开发其它项目时,会造成exe、内存占用增大
6 天前 18:55
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:19
帖 子:282
专家分:532
注 册:2007-8-11
收藏
得分:0 
如果类之间存在继承关系,那么区别应该不是很大。
如果你认为“存在很多实例化对象”会占用大量内存,可采用亨元模式避免大量内存的占用,代价就是可能需要牺牲执行速度。
6 天前 20:26
ccb2000
Rank: 2
等 级:论坛游民
威 望:2
帖 子:21
专家分:40
注 册:2022-2-26
收藏
得分:0 
传递对象参数,总是按SET UDFPARMS REFERENCE处理,不会重建一份对象属性的拷贝。

如果子程序修改了对象属性,也同时修改了主程序的对象属性。

测试例子:

do test with thisform

proc test
para x1
x1.caption="test"

5 天前 11:03
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2153
专家分:4682
注 册:2012-2-29
收藏
得分:0 
回复 5楼 ccb2000
学习啦,谢谢!
5 天前 11:05
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:956
专家分:1505
注 册:2021-10-13
收藏
得分:0 
回复 6楼 schtg
都研究这么深奥的问题了吗?
4 天前 01:05
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2153
专家分:4682
注 册:2012-2-29
收藏
得分:0 
回复 7楼 sam_jiang
学习哈,没有研究哦。
4 天前 06:41
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:370
专家分:910
注 册:2021-11-24
收藏(1)
得分:0 
回复 5楼 ccb2000
请教 ccb 老师一个问题:

VFP的变量 在内存中是明文吗?

另:如果是明文的话,使用内存加密对VFP有效吗,代码如下:

DECLARE INTEGER CryptProtectMemory IN "Crypt32.dll" ;
    STRING @pData, INTEGER cbData, INTEGER dwFlags

DECLARE INTEGER CryptUnprotectMemory IN "Crypt32.dll" ;
    STRING @pData, INTEGER cbData, INTEGER dwFlags

* 加密数据
cSecret = "MyPassword"
nSize = LEN(cSecret)
= CryptProtectMemory(@cSecret, nSize, 0)

谢谢!

4 天前 11:14
ccb2000
Rank: 2
等 级:论坛游民
威 望:2
帖 子:21
专家分:40
注 册:2022-2-26
收藏
得分:0 
VFP的变量在内存中是明文。

* 加密数据
cSecret = "MyPassword"
nSize = LEN(cSecret)
= CryptProtectMemory(@cSecret, nSize, 0)
?cSecret

4 天前 17:33
快速回复:关于类实例化后内存大小的变化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.179816 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved