首页 生活常识 正文

公共区域费用分摊的函数(公共区域费用分摊的函数是什么)

哪些区域是线程私有的哪些是共有的malloc函数大吗c语言中菜单函数具体用法示例realloc函数的用法VB中如何在窗体中调用模块的public函数Java运行时区域,哪些区域是线程私有的哪些是共有的JVM运行时数据区域大致可以分为:...

大家好,关于公共区域费用分摊的函数很多朋友都还不太明白,今天小编就来为大家分享关于公共区域费用分摊的函数是什么的知识,希望对各位有所帮助!

本文目录

  1. Java运行时区域,哪些区域是线程私有的哪些是共有的
  2. malloc函数大吗
  3. c语言中菜单函数具体用法示例
  4. realloc函数的用法
  5. VB中如何在窗体中调用模块的public函数

Java运行时区域,哪些区域是线程私有的哪些是共有的

JVM运行时数据区域大致可以分为:程序计数器、虚拟机栈、本地方法栈、堆区、元空间、运行时常量池、直接内存等区域;就是下面这个样子的:

其中有些区域,随着JDK版本的升级不断调整,例如:

JDK1.6,字符串常量池位于永久代的运行时常量池中;

JDK1.7,字符串常量池从永久代剥离,放入了堆中;

JDK1.8,元空间取代了永久代,并且放入了本地内存(Nativememory)中。

以上几个区域,按照线程公有还是私有可分为:

线程隔离:程序计数器、虚拟机栈、本地方法栈;

线程公有:其它的都是线程共享的区域。

线程私有

1.程序计数器

一个CPU在某个时间点,只能做一件事情,在多线程的情况下,CPU运行时间被划分成若干个时间片,分配给各个线程执行;

程序计数器的作用就是记录当前线程执行的位置,当线程被切换回来的时候,能够找到该线程上次运行到哪儿了;所以程序计数器一定是线程隔离的。

2.虚拟机栈和本地方法栈

虚拟机栈:每个Java方法在执行的同时,会创建一个栈帧,用于存储局部变量表、操作数栈、常量池引用等信息;方法的调用过程,就是一个栈帧在Java虚拟机栈中入栈和出栈的过程;

本地方法栈:和虚拟机栈很类似,区别在于虚拟机栈为Java方法服务,本地方法栈为Native方法服务;其中Native方法可以看做用其它语言(C、C++或汇编语言等)编写的方法;

HotSpot虚拟机就选择了将虚拟机栈和本地方法栈合并在了一起;

为了保证线程中的局部变量不被别的线程访问到,所以虚拟机栈和本地方法栈是线程隔离的。线程公有

1.堆区

对于堆栈的区别总结一句话:堆中存对象,栈中存基本数据类型和堆中对象的引用;一个对象的大小是可以动态变化的,而引用是固定大小的。

这么看就容易理解堆为什么是线程公有的了,省地儿啊。

2.元空间区/方法区

方法区用于存放已被加载的类信息、常量、静态变量、即编译器编译后的代码等。

还有要注意的一点:方法区是JVM的规范,在JDK1.8之前,方法区的实现是永久代;从JDK1.8开始JVM移除了永久代,使用本地内存来存储元数据并称之为:元空间(Metaspace)。

3.运行时常量池

Class文件中的常量池,会在类加载后被放入这个区域。

另外在JDK1.7之前,字符串常量池就在运行时常量池中,后来字符串常量池放入了堆中,而运行时常量池仍然在方法区(元空间区)中。

有兴趣的朋友可以自己测试一下,以死循环方式创建字符串常量,JDK1.6会报永久代OOM;JDK1.7会报堆区OOM。

4.直接内存

也叫做堆外内存,并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。

JDK1.4加入的NIO类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用native函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内存进行引用和操作。

简单来说,直接内存就是JVM内存之外有一块内存区域,我们通过堆上的一个对象可以操作它;具体等讲到NIO部分的时候,再回来加深理解。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取海量学习资料。

malloc函数大吗

malloc函数大,

malloc函数(全称memoryallocation函数),中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址。使用malloc函数,如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。

c语言中菜单函数具体用法示例

#include<conio.h>#include<dos.h>#include<graphics.h>#include<stdio.h>#include<stdlib.h>

/*定义一些常数*/#defineNO0#defineYES1#defineNONE-1#defineMAX_MENU7/*根据情况改变可以在菜单显示的最大项*/

/*全局参数*/intX,Y;intSelection;intbutton,x,y;void*p;size_tarea;

/*菜单结构*/structMENU{/*左上角*/intx;inty;/*右下角*/intx1;inty1;unsignedcharActive[MAX_MENU];/*菜单项是否激活的标志*/char*head;/*菜单的名字(可选项)*/};

intMouseOn(structMENU*t);voidProcess();voidXorbar(intsx,intsy,intex,intey,intc);voidShow();voidHide();voidStatus();

/*通过下面的参数用户可以改变按钮的位置。*/

structMENUFile={200,110,250,130};structMENUEdit={295,110,345,130};structMENUHelp={390,110,440,130};structMENUClose={600,10,620,30};structMENUNeeraj={380,300,460,315};

voidmain(){intgd=DETECT,gm;/*初始化图形界面*/initgraph(&gd,&gm,"");Selection=NONE;/*是否激活菜单项,YES表示激活;NO表示取消激活*/for(gd=0;gd<MAX_MENU;gd++){File.Active[gd]=YES;Edit.Active[gd]=YES;Help.Active[gd]=YES;Close.Active[gd]=YES;}/*菜单项的名字,用户可以修改以显示其他的名称*/File.head="[FileMenu]";Edit.head="[EditMenu]";Help.head="[HelpMenu]";Close.head="[Exit]";/*为界面分配内存*/area=p_w_picpathsize(0,0,150,150);p=malloc(area);/*没有足够的内存*/if(p==NULL){closegraph();restorecrtmode();printf("NotEnoughMemory!\ntrytoreducetheareaused.\n");exit(1);}setfillstyle(1,7);bar(0,0,640,480);X=2;Y=2;/*绘制这个界面*/Process();End();/*关闭图形显示方式*/closegraph();printf("GUI-MENUSByNeerajSharma-[email]n21@indiatimes.com[/email]\n");getch();}

voidProcess(){/*文件菜单项的子菜单项*/char*fm[]={"New","Open","Save","Saveas","Exit"};/*编辑菜单项的子菜单项*/char*em[]={"Undo","Cut","Copy","Paste","Delete","SelectAll"};/*帮助菜单项的子菜单项*/char*hm[]={"HelpTopics","AboutMenus"};/*如果用户在这里改变的了菜单项的值,那么也同样需要改变在函数中的PullMenuDown(char*,int)值*/charKEY;/*绘制各个菜单*/Win(140,100,500,140);/*绘制文件菜单项*/DrawBtn(&File,"File");/*绘制编辑菜单项*/DrawBtn(&Edit,"Edit");/*绘制帮助菜单项*/DrawBtn(&Help,"Help");settextstyle(0,0,0);outtextxy(Close.x+7,Close.y+7,"x");Comments();Show();/*正如下面所示用户可以激活和取消激活一个菜单项下面的'saveas'被取消激活*/File.Active[3]=NO;/*Saveas*/Edit.Active[0]=NO;/*取消激活*/while(1){if(kbhit()){KEY=getch();/*如果用户按下"ESC"或者"-"推出程序*/if(KEY==27||KEY==45)break;}Status();/*如果按下鼠标左键*/if(button==1){/*用户点击Close*/if(MouseOn(&Close))break;/*用户点击File*/if(MouseOn(&File)){PullMenuDown(fm,5,&File);/*菜单项为5*/if(Selection==NONE)Msg("NoSelection!");elseMsg(fm[Selection]);if(Selection==4)break;}/*用户点击Edit*/if(MouseOn(&Edit)){PullMenuDown(em,6,&Edit);/*菜单项为6*/if(Selection==NONE)Msg("NoSelection!");elseMsg(em[Selection]);}/*用户点击Help*/if(MouseOn(&Help)){PullMenuDown(hm,2,&Help);/*菜单项为2*/if(Selection==NONE)Msg("NoSelection!");elseMsg(hm[Selection]);if(Selection==1)Msg("*ProgrammingByNEERAJSHARMA*");}}else{/*鼠标在那个菜单项上,就高亮显示之*//*高亮显示文件菜单项*/if(MouseOn(&File))Hlight(&File);/*高亮显示编辑菜单项*/if(MouseOn(&Edit))Hlight(&Edit);/*高亮显示帮助菜单项*/if(MouseOn(&Help))Hlight(&Help);/*高亮显示关闭菜单项*/if(MouseOn(&Close))Hlight(&Close);if(MouseOn(&Neeraj)){Msg("Hello,everyone");while(MouseOn(&Neeraj)){Status();if(button!=0)break;if(kbhit())break;}Msg("");}}}Msg("::ByeBye::");}

/*绘制菜单项*/DrawBtn(structMENU*tm,char*txt){/*设置绘制的颜色*/setcolor(0);/*设置文本格式*/settextstyle(2,0,4);/*输出txt文本*/outtextxy(tm->x+15,tm->y+4,txt);}/*高亮显示函数*/Hlight(structMENU*t){/*高亮*/winp(t,0);/*显示菜单项名称*/Msg(t->head);/*在没有输入的情况下,一直高亮*/while(MouseOn(t)){Status();if(button!=0)break;if(kbhit())break;}/*消除高亮*/setcolor(7);Hide();rectangle(t->x,t->y,t->x1,t->y1);Msg("");/*重绘*/Show();}

intMouseOn(structMENU*t){intflag;flag=0;if(x>=t->x&&x<=t->x1&&y>=t->y&&y<=t->y1)flag=1;returnflag;}

voidXorbar(intsx,intsy,intex,intey,intc){inti;setwritemode(1);setcolor(c);Hide();for(i=sy;i<=ey;i++)line(sx,i,ex,i);Show();setwritemode(0);}

Push(structMENU*tm){winp(tm,1);while(button==1){Status();if(kbhit())break;}}

Up(structMENU*tm){setcolor(7);Hide();rectangle(tm->x,tm->y,tm->x1,tm->y1);Show();while(button==1){Status();if(kbhit())break;}}

/*弹出下拉菜单*/PullMenuDown(char*H[],intn,structMENU*tm){inti;i=n*20;/*保存背景*/Push(tm);/*隐藏鼠标光标*/Hide();/*把菜单项位图读入内存,以供收回弹出项时重新绘制*/getp_w_picpath(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5,p);/*重新设置这块区域*/Win(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5);setcolor(0);settextstyle(2,0,4);/*弹出下拉菜单项*/for(i=0;i<n;i++){if(!tm->Active[i]){setcolor(15);outtextxy(tm->x+15,tm->y1+9+i*20,H[i]);setcolor(0);outtextxy(tm->x+14,tm->y1+8+i*20,H[i]);}elseouttextxy(tm->x+14,tm->y1+8+i*20,H[i]);}/*显示鼠标光标*/Show();while(button==1)Status();HandleMenu(n,tm);}

PullMenuUp(intn,structMENU*tm){inti;/*隐藏鼠标光标*/Hide();/*把读入内容的原菜单项位图重新绘制出来*/putp_w_picpath(tm->x+1,tm->y1+2,p,COPY_PUT);/*显示鼠标光标*/Show();Up(tm);}/*处理菜单项命令函数*/HandleMenu(intn,structMENU*tm){inti;charKey;setcolor(0);Selection=NONE;i=0;while(1){Status();if(button==1)break;for(i=0;i<n;i++){Status();if(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20)){Xorbar(tm->x+3,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20,14);while(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20)){Status();if(button==1){if(tm->Active[i]==YES){Selection=i;break;}elseSelection=NONE;}if(kbhit())break;}Xorbar(tm->x+3,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20,14);}}}PullMenuUp(n,tm);}

MouseOn1(intcx,intcy,intcx1,intcy1){intflag;flag=0;if(x>=cx&&x<=cx1&&y>=cy&&y<=cy1)flag=1;returnflag;}

/*Mouse&winroutines*/

unionREGSi,o;structSREGSss;

/*显示鼠标光标函数*/voidShow(){i.x.ax=1;int86(0x33,&i,&o);}

/*隐藏鼠标光标函数*/voidHide(){i.x.ax=2;int86(0x33,&i,&o);}

/*获得鼠标状态函数*/voidStatus(){i.x.ax=3;int86(0x33,&i,&o);button=o.x.bx;x=o.x.cx;y=o.x.dx;}/*绘制菜单项的背景和边框*/winp(structMENU*t,intstate){Hide();/*非高亮模式*/if(state==1){/*两条暗边框线*/setcolor(0);line(t->x,t->y,t->x,t->y1);line(t->x,t->y,t->x1,t->y);/*两条亮边框线*/setcolor(15);line(t->x1,t->y,t->x1,t->y1);line(t->x,t->y1,t->x1,t->y1);}/*高亮模式*/else{/*两条亮边框线*/setcolor(15);line(t->x,t->y,t->x,t->y1);line(t->x,t->y,t->x1,t->y);/*两条暗边框线*/setcolor(0);line(t->x1,t->y,t->x1,t->y1);line(t->x,t->y1,t->x1,t->y1);}Show();}/*绘制一个矩形区域*/Win(intsx,intsy,intex,intey){Hide();/*设置填充的颜色*/setfillstyle(1,7);/*绘制一个区域*/bar(sx,sy,ex,ey);/*两条亮边框线*/setcolor(15);line(sx,sy,sx,ey);line(sx,sy,ex,sy);/*两条暗边框线*/setcolor(0);line(ex,sy,ex,ey);line(sx,ey,ex,ey);Show();}

Msg(char*m){intl;setcolor(14);rectangle(18,438,622,477);setfillstyle(1,0);bar(20,440,620,475);if(MouseOn(&Neeraj)){settextstyle(2,0,7);setcolor(11);l=textwidth(m)/2;outtextxy(320-l,440,m);}else{settextstyle(2,0,8);setcolor(15);l=textwidth(m)/2;outtextxy(320-l,440,m);outtextxy(321-l,441,m);}}

Comments(){setfillstyle(1,0);bar(140,5,500,40);setcolor(14);rectangle(140,5,500,40);settextstyle(2,0,8);setcolor(15);outtextxy(260,10,"GUI-MENUS");setfillstyle(1,8);bar(140,150,502,402);setcolor(14);rectangle(138,148,502,402);Msg("Welcome!");settextstyle(2,0,5);setcolor(10);outtextxy(158,180,"HelloFriends!");settextstyle(2,0,4);outtextxy(260,200,"Hereiamwithmymenuprogram.");outtextxy(158,220,"Asyoucanseeit'slikewindowsmenu,youcan");outtextxy(158,240,"addmoremenustoit.It'sjustaconceptfor");outtextxy(158,260,"buildingmoremenus.Ihopeyouwilllikemyeffort,");outtextxy(158,280,"emailmeat:[email]n21@indiatimes.com[/email]");setcolor(14);outtextxy(370,300,"-NeerajSharma");line(380,304+textheight("A"),380+textwidth("NeerajSharma"),304+textheight("A"));}

End(){inti,j;setcolor(0);Hide();for(j=0;j<40;j++){for(i=0;i<481;i+=20)line(0,0+i+j,640,j+0+i);delay(100);if(kbhit())if(getch()==27)break;}settextstyle(2,0,5);setcolor(15);outtextxy(220,180,"Thanksforbeingwithus!");Show();delay(3000);}

realloc函数的用法

void*realloc(void*p,size_tsize)realloc函数将p指向的对象的长度修改为size个字节.如果新分配的内存比原来的大,则原来的数据保持不变.增加的空间不进行初始化.如果新分配的内存比原来的内存小,则新的内存空间不被初始化.realloc函数返回指向新分配空间的指针.若无法满足要求则返回NULL指针.在这种情况下.原指针p指向的单元内容保持不变。

VB中如何在窗体中调用模块的public函数

解决方案1:则该变量只是在其所属工程中是公用的。可以使用Public语句声明一个过程,PublicNumberOfEmployeesAsInteger也可以使用Public语句来声明变量的对象类型:在模块级别中使用,PrivateNumberOfEmployeesAsInteger也可以使用Private语句来声明变量的对象类型,1根据MSDN的定义、对象和过程在所有应用程序的所有没有使用OptionPrivateModule的模块的任何过程中都是可用的、Public是在公共模块中定义变量。

如果使用Public在窗体模块或者类模块中定义的变量、对象和过程时使用的。

Private语句声明的变量(包括数组变量)。2。例如。例如;若该模块使用了OptionPrivateModule,可以在过程内用ReDim语句来定义该数组的维数和元素。

例如、对象和过程可以在整个程序的各个模块中使用,定义的变量。

Public语句声明的变量(包括数组变量)。可以使用Private语句声明一个过程、对象和过程只能在本模块内使用,用于声明私有变量及分配存储空间、Public语句Public语句。二,然后可以在过程内用ReDim语句来定义该数组的维数和元素。

MSDN是这样定义的,通过窗体名称或者类名称的引用也可以在其他模块中使用、Private在模块级别中定义变量。使用Public语句可以声明变量的数据类型、对象和过程,定义的变量。

Private变量只能在包含其声明的模块中使用:

一,PublicXAsNewWorksheet可以用带空圆括号的Public语句来声明动态数组。

可以使用Private语句声明变量的数据类型,只在声明所在的模块中有效:在模块级别中使用、对象和过程。

在声明了动态数组之后,用于声明公用变量和分配存储空间,包括窗体模块和标准模块,PrivateXAsNewWorksheet可以用带空圆括号的Private语句来声明动态数组、Private语句解决方案2lpDataAsAnyPrivate是在窗体模块中定义变量;Public是在公共模块中定义变量.dll"RegSetValueExA"。

譬如;(ByValhKeyAsLong、数据类型或者子过程时使用的,ByValdwTypeAsLong,ByVallpValueNameAsString;Alias",youmustpassitByValue。

Public:Private,定义的东西只能在本窗体内使用,ByValReservedAsLong、数据类型或者子过程时使用的,定义的东西可以在整个程序的各个窗体中使用:(窗体中的公共部分写入)

PrivateDeclareFunctionRegSetValueExLib",ByValcbDataAsLong)AsLong'advapi32;NotethatifyoudeclarethelpDataparameterasString.

文章分享结束,公共区域费用分摊的函数和公共区域费用分摊的函数是什么的答案你都知道了吗?欢迎再次光临本站哦!

本文转载自互联网,如有侵权,联系删除