c#中如何手动分配内存

jin20000 2008-05-04 01:39:04
C#新手,对内存管理之道不多,只知道C#是自动托管的,不知道在不安全代码中能不能手动分配内存。

主要是想实现下面的效果:

事先划好几个内存块,比如将200K 划分成 5 块,分别为 20,30, 40,50,60, 在界面上用 5 个Panel, 标明每块的大小。 分配的时候,必须输入 作业名 和申请分配的空间大小,如果 找到还没有分配的内存块,并且 内存块的大小 大于申请的空间大小,这将这块内存块分配给这个作业。 即: 在这个内存块上面标上作业名,表示已经分配。回收的时候,需要用户输入作业名,根据作业名和已经分配的内存块匹配,如果名称相同,则回收内存,将内存块上面的作业名去掉。
同时 这些内存块面板没有分配的时候,用蓝色显示; 已经分配的用红色显示。。。


...全文
1001 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyotongxue 2010-04-01
  • 打赏
  • 举报
回复
我也想知道啊
shiqicai 2009-02-08
  • 打赏
  • 举报
回复
楼主应该是学生吧,用的操作系统里的术语,有的操作系统的 书是这样翻的.
smallfz 2008-05-04
  • 打赏
  • 举报
回复
从msdn抄来的:

// cs_keyword_stackalloc.cs
// compile with: /unsafe
using System; class Test
{
public static unsafe void Main()
{
int* fib = stackalloc int[100];
int* p = fib;
*p++ = *p++ = 1;
for (int i=2; i<100; ++i, ++p)
*p = p[-1] + p[-2];
for (int i=0; i<10; ++i)
Console.WriteLine (fib[i]);
}
}


http://msdn.microsoft.com/en-us/library/cx9s2sy4(VS.71).aspx#Mtps_DropDownFilterText
smallfz 2008-05-04
  • 打赏
  • 举报
回复
从msdn抄来的:


// cs_keyword_stackalloc.cs
// compile with: /unsafe
using System; class Test
{
public static unsafe void Main()
{
int* fib = stackalloc int[100];
int* p = fib;
*p++ = *p++ = 1;
for (int i=2; i<100; ++i, ++p)
*p = p[-1] + p[-2];
for (int i=0; i<10; ++i)
Console.WriteLine (fib[i]);
}
}
genlinux 2008-05-04
  • 打赏
  • 举报
回复
什么是作业啊?对不起, 我的中文不是很好, 特别是中国的电脑专有名词.
//========
jin20000 2008-05-04
  • 打赏
  • 举报
回复
分配内存的可能还好说一点,但是要结合起作业来,就比较麻烦了,就像gomoku说的不知道这么分给作业,不知有没有大神能给个结合了作业的内存分配的代码,大概的就好。等待中。。。。。。。。。。。。。
genlinux 2008-05-04
  • 打赏
  • 举报
回复
stackalloc

unsafe
{
int* ptrInt = stackalloc int[4]; //分配可以保存4个int的内存空间.
}
sunshine_anycall 2008-05-04
  • 打赏
  • 举报
回复
为什么要用c#做呢
直接用c++做好了,用c#调好了
jin20000 2008-05-04
  • 打赏
  • 举报
回复
各位大神多帮帮忙啊,难道这个用C#就实现不了?
jin20000 2008-05-04
  • 打赏
  • 举报
回复
继续期待中。。。。。
gomoku 2008-05-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 jin20000 的帖子:]
事先划好几个内存块,比如将200K 划分成 5 块,在界面上用 5 个Panel, 标明每块的大小。 分配的时候,必须输入 作业名 和申请分配的空间大小,
[/Quote]

知道怎样分配系统内存,还真不知道如果给作业用。

int cb = 200 * 1024;
IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(cb);
//...
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
kakajya 2008-05-04
  • 打赏
  • 举报
回复
不知帮顶
阿亮 2008-05-04
  • 打赏
  • 举报
回复
可以的,在不安全代码中使用结构类型就可以,结构里的某个字段可以是固定长度的字节数组.
tautaulee 2008-05-04
  • 打赏
  • 举报
回复
不知帮顶.!
jin20000 2008-05-04
  • 打赏
  • 举报
回复
在线等各位大大的帮忙!!!!!!!!!

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧