㈠ VC中的内存是如何分配的
1)学习C\C++的是不需要研究这个问题的。这个问题不属于C\C++.
2)如果楼主学过汇编知识,这个问题太简单了,属于必备知识。
3)如果楼主学过一段时间的操作系统知识或PE文件格式问题,这个问题也是很容易找到答案的。
4)可目前而言,要透彻理解这个问题很难。时间久了,知识丰富了,就算不属于C\C++的知识范畴,楼主也会明白的。
5)可以简单理解为,这个好比在小格子文稿纸中写文章一样,假设每个小格子都有编号,你写了2个段落后。开始写第三段落时,要写的第一个字所在的小方格上肯定也会有个编号,楼主的问题就好比在问为什么第三段落的第一个字所在的小方格的编号为0x0012FF64?原因很简单,一个一个排下来的。
6)写文章肯定是从第一个格子,一个一个写下来的,但与写文章不同的是,程序的地址分配不是连续的。它分为好多块,代码为一块,全局变量为一块,菜单资源、对话框、工具栏资源又归在一块等等很多内容。这样一来,就好比楼主写了篇文章,让编译器编译后,编译器把所有的动词全部归为一类,放在了第一段落,然后重启一行,归纳所有的名词。再归纳所有的形容词,以此类推。因此,如果楼主上手写的文章第一个字是“我”(名词),原来应该的地址为0x00000000,可实际被编译器安排到了exe文件中第二段落的第一个小格子里。这个小格子的地址究竟为多少,取决于第一段落里的动词的数量。编译器要把整篇文章所有的动词归纳到第一段后,“我”这个名词在第二段落第一个格子的编号才能被确定下来。(实际的编译器肯定不是这样工作的,但实现的结果就和这个差不多,后一段的地址总是要取决于前一个段落内容的多少而定)
7)当把exe文件从磁盘装到内存中时,操作系统不是按照磁盘上的地址顺序转入的,譬如exe文件第1,2个字为“开始”(动词)、“执行”(动词),但被装入内存后,地址往往(按照现有的任何操作系统要求绝对不可能)不是0x00000000和0x00000001,而是0x00400000和0x00400001。
大致的情况就是如此了,不知道这样解释楼主是否明白了些,还是被我弄得一头雾水~
㈡ vc内存分配
windows 32位操作系统下,使用内存分页机制。每个进程都在自己虚拟的独立内存里。
而通用寄存器为32位,可以使用32根线性地址寻址。寻址的方式等于2的32次方。也就相当于4G左右。也就是说,每个进程只拥有4G左右的虚拟内存空间。
并且4G里有2G左右被系统使用,代码能用的就2G以内。地址范围是0x00400000到0x7FFFFFFF
你的实际内存大并不能增加1个进程可以使用的虚拟内存.
㈢ Vc6.0为int变量开辟4个字节的内存空间,并按整型数的存储方式存放数据,允许存放的数值范围是怎样得到的
4个字节就是32个BIT,最高一个BIT作为符号位,剩下31BIT, 这个范围就是这31BIT所能表达的最大数值,即2的31次方。
㈣ vc如何实现内存映射
内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。
㈤ vc中怎样快速在文件中存储大容量数据
大容量文件读写,用内存映射文件能提高速度。
㈥ VC中int,long,float.double是如何存储的
其实这这些都是申请内存。
int,long等等都是指明如何使用这些内存
这些东西在汇编里面概念很清楚。
例如
int a;
那么就在内存中定义了sizeof int = 4(32位机器上的int是4字节,其它的可以这样算:
X位机器的int占用X/8字节)
若编译器规定a的地址为1000
那么属于a的内存地址为1000~1003
另外,float等实数的运算和FPU与协处理器有关,详细请到Google上查。
㈦ VC++ 如何把图像存入内存
我也用的这个图形库,接分来了~~
代码如下:
#include <graphics.h> // 就是需要引用这个图形库
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
initgraph(640, 480);
IMAGE p; // 放到 initgraph() 后面定义
setbkcolor(3);
circle(535, 260, 35);
circle(450,260,35);
line(535,260,450,260);
line(500,200,550,200);
line(500,200,450,260);
getimage(&p, 415,200,200,100); // 最后两个参数表示宽度和高度
// 贴到左上角测试一下
putimage(0, 0, &p);
getch(); // 按任意键继续
closegraph(); // 关闭图形界面
}
㈧ VC6.0内存有多大
VC6.0占用的内存取决于工程的类型和文件的数量。 不过分析这个没什么意义,因为在实际工程中VC6.0已经淘汰很多年了,哪怕是6年前的VC8.0也比它先进许多。
㈨ VC 大量数据存储问题,我现在有200000多点数据需要存储,数组定义又不能那么大有什么办法呢
你的数据单元的大小是多少?数组长度的最大值是多少?数目为200000多并不算大,如果数据单元不是非常大,用new或malloc在堆中分配就可以。目前的计算机一般分配个几百MB都不会报错,就假设你的数组元素最大可能达到300000个,需要设定数组长度为300000,而数据单元的大小为1000字节,那么需要占用的内存大小为300MB,这一般是可以承受的,况且你的数据单元估计远小于1000字节吧?所以在堆中分配内存即可。
另外在对于这种使用大块内存的情况,相较于在堆中分配内存,使用WindowsAPI的VirtualAlloc或内存映射文件更加直接高效。
㈩ vc2015典型配置要多少内存
官方指定:1 GB (32位), 2 GB (64位)的内存,如果使用虚拟机安装VS2015,那么宿主机再增加512MB内存。