c语言虚拟内存
㈠ c语言malloc函数当申请的空间大于内存时是否会使用虚拟内存
虚拟内存是现代计算机一个很重要的技术基础,不是malloc申请的空间大于内存时才会使用虚拟内存,而是一直分配的都是虚拟内存,有时候可以说,正是因为引入了虚拟内存,才使得动态内存分配如此简单。。没事欢迎来0x30 网络贴吧耍耍,共同分享学习c/c++
㈡ linux系统下的C语言中的虚拟内存分配问题
因为内存管理由glibc管理,当它认为需要释放时,才释放前提是,你已经让它释放了,说的简单就是,你让它释放,它要过一段时间等合适了,再释放
㈢ 如何用c语言实现虚拟内存
关注一下,期待高手
可以使用Windows 的FileMapping功能 把文件映射到内存进行管理.
具体函数如下:
CreateFileMapping
FlushViewOfFile
MapViewOfFile
MapViewOfFileEx
OpenFileMapping
UnmapViewOfFile
For Virtual Memory. You can use a series of function provided in WindowsNT, it includes:
VirtualAlloc()
VirtualAllocEx()
VirtualFree()
VirtualQuery()
VirtualProtect()
VirtualLock()
VirtualUnlock()
GetProcessWorkingSetSize()
SetProcessWorkingSetSize()
etc..
You can get familiar with them through MSDN
另备注一份网址:希望对你有用。
㈣ C语言 argc,argv,env是加载到 虚拟内存的 栈区 还是 什么地方
main也是一个函数,只要是函数,参数统统放在函数栈帧的底部。
㈤ C语言:内存分哪几个区各有什么用
32位操作系统中有4G的虚拟内存,1、os区为系统所占内存 2、栈区auto区的内存是自动分配的,不需要malloc申请 3、堆区需要自己申请所要用的内存,在用的同时,用完之后要用free释放,防止内存泄漏 4、静态区分中有BSS区.文本区.常量区
㈥ c语言中数组里面的每一个
使用C语言编程,实际上使用的内存只有一种——虚拟内存。根据功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,无论单一变量还是数组,其内存分配都是如此。其中,栈区、静态数据区、堆区都会有编译器负责分配、操作系统负责管理,程序员可以在堆区使用malloc()来动态分配堆内存。1、栈区:一般每一个函数对应一个栈区,在编译原理中称为栈帧。比如下面的代码:int main(){//定义一个有20个int元素的数组。此时数组a分配的虚拟内存称为栈区,有编译器自行分配。 int a[20] = {0}; return 0;}2、静态数据区:这实际上对应于生成的可执行文件的.data区段,因为这个区段在生成的可执行文件中,因此是“静态的”。比如下面的代码://定义一个20个int元素的全局数组,此时数组分配的虚拟内存称为静态数据区,有编译器自行分配。int g_a[20]; int main() { return 0;}3、堆区:堆区是最复杂的,有操作系统负责堆管理,但是当用C语言编译器生成一个可执行文件并且运行时,它会默认建立一些堆。拿Windows来说,每一程序运行,它会建立至少两个堆,一个是默认堆,一个是new堆。比如下面的代码:int main(){ int *pa = (int*)malloc(sizeof(int)*20);//分配20个int元素大小的堆空间。 return 0;}
㈦ C语言中内存是什么意思
当然是内存条。硬盘又叫“外存”,只有进行文件操作时才需要涉及硬盘。
㈧ C或C++程序编译时内存分为几个存储区
1、从操作系统原理的角度来看,只有一个存储区就是虚拟内存。
2、根据功能可以分为 ,栈区 、堆区、静态区, 栈区一般指的一个函数局部变量,在编译原理中这叫做一个栈帧。 堆区一般是为了用户自由分配的,一般C语言中用MALLOC函数分配,C++中用NEW运算符来分配,它是有操作系统的堆管理器来管理的,拿windows来说,在一个程序运行后,一般至少有两个默认的堆,一个是new堆,一个进程 自己的堆, 静态区,这个一般是全局变量或者static变量使用的区域,这个区域,如果你对PE结构熟悉,就会明白这实际上是pe 区段中的.data区段,当程序运行后变成进程,这个区段是直接内存文件映射过去的。
㈨ 关于C语言的指针与虚拟地址,物理地址的关系问题
由于WINDOWS是一个实时多任务的操作系统,所以系统为每个进程(以32位进程为例)4G内存,所以每个进程看起来都拥有4GB的内存,但是该内存为虚拟内存空间,如果空间不够还会使用硬盘进行虚拟。4G的内存,操作系统占用2G,应用可以使用2G。所以c语言的指针一定是指向了虚拟的地址,而具体的物理地址由操作系统调度和调配。
㈩ c语言malloc函数当申请的空间大于内存时是否会使用虚拟内存
c语言不作这方面的判断,这是操作系统的事.
c语言程序直接将申请内存的请求发送给操作系统,操作系统会根据具体情况来处理,需要使用虚拟内存就使用,但在c语言程序来看,得到的内存与物理内存是一样的.
一般程序编译时会指定自己的堆有多大,malloc在堆中申请,如果超过堆的尺寸会申请失败;程序在启动时,向操作系统申请堆空间,一般不会是在运行时才申请堆空间的.