c# 一直创建覆盖文件会不会浪费java 内存中创建文件

I'd like to store different datatypes in the same memory using union. This array has a fixed length and shall be accessed quickly and shall waste as little memory as possible.
I will define areas in which the same datatypes are stored. So I do this:
#include &stdio.h&
#include &stdint.h&
#include &stdlib.h&
#include &inttypes.h&
#define RESERVED_BYTES
//#define RESERVED_BYTES
typedef union {
char c[RESERVED_BYTES];
uint8_t u8[RESERVED_BYTES];
uint16_t u16[RESERVED_BYTES / 2];
int main(void)
array_type *
array = calloc(1, sizeof(array_type));
getchar();
This code works and allocates 1GB of memory and the elements of that array can be used with array[0].u8[3] e.g. I know I have to take care of indices because they depend on the byte-size.
Sadly the code fails to compile if I increase the memory size(see #define RESERVED_BYTES ) and with MSVS 2013 on a 64bit machine I receive an error C2148: total size of array must not exceed 0x7fffffff bytes. On the other hand it is no problem to put the 2GB straight into the calloc like that array = calloc(, sizeof(*array));.
But with this version I might waste memory:
uint8_t u8;
uint16_t u16;
or need to build a time-consuming function that calculates the both indices I want to avoid:
char c[2];
uint8_t u8[2];
uint16_t u16[1];
array[3].u8[2] = 1;
So how to deal with that issue?
I'd like to store different datatypes in the same memory using union. This array has a fixed length
Going by the code you posted, the arrays have the same byte-length, but hold different number of elements based on their type.
I receive an error C2148: total size of array must not exceed 0x7fffffff bytes.
If I were to guess, this might be related to the 2 GB limit on static data that applies even to 64-bit compiles, meaning that a union of type array_type could never be instantiated as either a global/static variable, or a local/stack one (). Which, in the end, means that the only choice left is to allocate such an array dynamically on the heap.
But with this version I might waste memory
...or need to build a time-consuming function that calculates the both indices
You could achieve (nearly) the same effect by slightly modifying the union definition, without memory waste and without additional accessors.
#define RESERVED_BYTES
typedef union {
uint8_t *pu8;
uint16_t *pu16;
int main(void)
parray.pv = calloc(RESERVED_BYTES, 1);
// last element in allocated buffer for each type
char c = parray.pc[RESERVED_BYTES - 1];
uint8_t u8 = parray.pu8[RESERVED_BYTES - 1];
uint16_t u16 = parray.pu16[RESERVED_BYTES / 2 - 1];
Of course, you'll have to always remember that the max index for pu16 is half that of pc and pu8 but that's the premise in the original code as well.
本文地址: &
我想使用联盟不同的数据类型存储在相同的内存。该数组有一个固定的长度,并应快速访问并须浪费少存储器尽可能我将定义在其中相同的数据类型都存储区域。所以我这样做: 的#include<&stdio.h中GT;#包括LT&;&stdint.h GT;#包括LT&;&stdlib.h中GT;#包括LT&;&inttypes.h GT;#定义RESERVED_BYTES //#定义RESERVED_BYTES 工会的typedef {
烧焦C [RESERVED_BYTES] // 1字节
uint8_t有U8 [RESERVED_BYTES] // 1字节
uint16_t U16 [RESERVED_BYTES / 2]; // 2字节} ARRAY_TYPE;INT主要(无效){
ARRAY_TYPE *阵列;
阵=释放calloc(1,sizeof的(ARRAY_TYPE));
的getchar();
返回0;} 这code ++工程,并分配1GB的内存和数组的元素可以用数组[0] .u8 [3] 例如使用我知道我有,因为它们依赖于字节大小照顾指数。可悲的是code编译失败,如果我增加内存大小(请参阅的#define RESERVED_BYTES
),并在64位机器上MSVS 2013我收到错误C2148:数组的总大小不得超过字节为0x7FFFFFFF 。在另一方面,它是把2GB直入释放calloc 一样,阵列=释放calloc(,sizeof的(*数组))没有问题; 。但是,随着这个版本我可能会浪费内存: 工会{
焦炭℃; // 1字节
uint8_t有U8; // 1字节
uint16_t U16; // 2字节} *阵列; 或需要构建计算两个指数欲避免耗时的功能: 工会{
焦C [2]; // 1字节
uint8_t有U8 [2]; // 1字节
uint16_t U16 [1]; // 2字节} *阵列;阵列[3] .u8 [2] = 1; 因此,如何处理这个问题?解决方案
我想用不同的工会数据类型存储在相同的内存。该数组有一个固定的长度由code你贴去,数组有相同的字节的-length,但持有的不同的的根据其类型元素的个数。
我收到一个错误C2148:数组的总大小不得超过字节为0x7FFFFFFF 。如果我是猜测,这可能与有关的静态的适用,甚至到64位编译,这意味着数据类型的联合 ARRAY_TYPE 2 GB限制不可能被实例为全局/静态变量,或本地/堆栈一(的)。其中,在年底,这意味着剩下的唯一选择就是在堆上动态分配这样一个数组。
但是,随着这个版本我可能会浪费内存
结果......还是需要建立一个计算这两个指数一个耗时的功能您可以通过略微修改联盟的定义,无记忆浪费,没有额外的访问实现(几乎)相同的效果。 的#define RESERVED_BYTES 工会的typedef {
uint8_t有* PU8;
uint16_t * PU16;} parray_INT主要(无效){
parray_type粒子阵列;
parray.pv =释放calloc(RESERVED_BYTES,1);
在每种类型分配的缓冲区//最后一个元素
焦C = parray.pc [RESERVED_BYTES
uint8_t有U8 = parray.pu8 [RESERVED_BYTES
uint16_t U16 = parray.pu16 [RESERVED_BYTES / 2
返回0;} 当然,你必须永远记住,对于最大指数 PU16 是一半的PC 和 PU8 但是这是在原来的code中的premise为好。
本文地址: &
扫一扫关注官方微信当前位置: →
→ winform程序,最小化,内存使用就一下减低很多隐藏内存使用不会减低解决方案
winform程序,最小化,内存使用就一下减低很多隐藏内存使用不会减低解决方案
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: winform程序,最小化,内存使用就一下减低很多?隐藏内存使用不会减低?怎么最小化,内存使用就一下减低很多? 我winform程序一启动...
"winform程序,最小化,内存使用就一下减低很多隐藏内存使用不会减低解决方案"::
winform程序,最小化,内存使用就一下减低很多?隐藏内存使用不会减低?怎么最小化,内存使用就一下减低很多?
我winform程序一启动内存使用显示12000k,最小化后内存使用显示700k
用hide()隐藏界面,内存使用为什么不会减低?------解决方案--------------------隐藏实际上还在画
最小化实际上是在屏幕坐标的负值方向在画,但是有些gdi+对象会在负值区域释放,所以最小化貌似会省内存.
------解决方案--------------------该用dispose的用dispose,该用close的用close,其它的,在内存使用的问题上,在.net里我们最好不用管它.
------解决方案--------------------net 作winform就是浪费内存的啦。
------解决方案--------------------很多东西停止重绘了吧
所以内存小了 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
winform程序,最小化,内存使用就一下减低很多隐藏内存使用不会减低解决方案_C#技术相关文章
C#技术_总排行榜
C#技术_最新
C#技术_月排行榜
C#技术_周排行榜
C#技术_日排行榜
马开东博客专栏
企业软件/开发
硬件/嵌入开发
马开东博客专栏
应用服务器
软件工程/管理/测试
马开东博客专栏
Linux/Unix
马开东博客专栏
开发语言/框架
专题开发/技术/项目
马开东博客专栏
高性能开发
马开东博客专栏新建c#项目,好象未保存时,也可以运行这个项目,不解,此时文件存在何处呢?难道未保存前全部项目内容全暂存于内存中吗?该怎么解决 - C#当前位置:& &&&新建c#项目,好象未保存时,也可以运行这个项目,不解,新建c#项目,好象未保存时,也可以运行这个项目,不解,此时文件存在何处呢?难道未保存前全部项目内容全暂存于内存中吗?该怎么解决www.MyException.Cn&&网友分享于:&&浏览:8次新建c#项目,好象未保存时,也可以运行这个项目,不解,此时文件存在何处呢?难道未保存前全部项目内容全暂存于内存中吗?新建c#项目,好象未保存时,也可以运行这个项目,不解,此时文件存在何处呢?难道未保存前全部项目内容全暂存于内存中吗?-----------------好多程序语言,写好代码后必须先保存,才能运行,可是c#在未保存之前就可以运行,我想了解一下,在项目还没有保存时,这个项目的内容存在何处,是临时的一个文件夹中呀,还是全在内存中,谢谢.------解决方案--------------------C#在运行前会自动保存用户的程序
------解决方案--------------------当你点击运行时C#自动就给你保存了不信你可以自己检验一下
------解决方案--------------------在以下这个文件夹下保存临时项目文件,如果用户自已手工保存,则临时目录自动删除.C:\Documents and Settings\用户名\Local Settings\Application Data\Temporary Projects
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有覆盖的安装的意思 是什么?会不会浪费内存装了两个程序??_百度知道
覆盖的安装的意思 是什么?会不会浪费内存装了两个程序??
这装包也两个?
我有更好的答案
1tb得了,自动卸载掉旧版本以后,安装新的版本上去,所以不用担心会装2个,当然现在硬盘都是500g不会的,覆盖安装的主要步骤就2部
采纳率:47%
覆盖安装也就是替换的意思,也相当于升级的道理,安装好后也只有一个程序,安装包就看你自己下了几个
不是,所谓覆盖安装是指安装到原程序的路径,把原来的程序覆盖掉,原程序就不存在了,不会浪费内存的
为您推荐:
其他类似问题
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。17:44 提问
C#静态变量重新赋值 旧数据还是会占用内存么
如果我的程序中有30个静态变量
而且频繁的对其进行赋值(几乎3秒一次)
那么之前的值(数据)
还是会占用内存么
这样挂起 会导致cpu飙高么?
按赞数排序
旧数据不会占用内存。
看什么类型,如果是引用类型,会消耗一些内存。值类型直接覆盖。
引用类型,如果之前的对象没有其它引用,会被gc回收,但是如果你的内存比较大,未必会马上回收。
如果你不断生成新的datatable,datatable又很大,不断赋值,那么的确效率很低。
不仅如此,查询本身也会占用cpu。
如果可能的话,直接更新datatable内的某行某列,而不是频繁生成。
影响有多大就看你的datatable本身是否有很多数据,查询它是否耗费资源,你的计算机的内存大不大,cpu快不快,很多因素在里面。定性的说,肯定是有开销的。
定量的没法说。
引用类型变量的值是引用对象的地址,赋新值(指向一个新的引用对象),旧值(原来引用对象的地址)即被覆盖,不会占用内存,当然被引用对象是否还占有内存是另外一回事。
原来引用对象是否占有内存,以及GC如何回收及回收占用多少CPU资源等与使用静态变量或动态变量引用它没有什么关系。
在CLR托管应用程序中,存在一个“根”的概念,你动态生成的table可以作为“根”存在。垃圾回收器会按照一定的节奏回收内存,在一次垃圾回收中,垃圾回收器会沿着线程栈上行检查“根”。检查到方法内的“根”时,如果发现没有任何一个地方引用它,都意味着该“根”已经被停止掉,标记该根可被释放,然后对象所占用的内存空间可被释放。
这要看你的静态变量是什么类型,而决定的,比如字符串类弄就是还会占用内存的,不会被覆盖,要等到GC收集才会释放
静态数据成员与全局变量相似,它的内存分派产生在应用程序类实例化的时候,即程序运行期间,其释放在程序运行结束时。但是如果你连续不断的对其赋值,旧的会被iis的回收机制回收,因为它是基于进程的,进程会进行重载,除非你显式的在代码中处理。想要长久保存,要么持久化到数据库里面,要么保证网站一直处于活动中。
尽量不要使用过多的静态变量,这样会使代码数据混乱,导致出错也很难发现。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 双核用8g内存浪费吗 的文章

 

随机推荐