首页 > 系统相关 >非托管内存简单使用

非托管内存简单使用

时间:2024-03-15 21:45:08浏览次数:29  
标签:tmpPtr 托管 bytes Length 内存 简单 Marshal

非托管内存

  • 将变量的值放到非托管内存通常用于优化性能和与外部非托管代码进行交互。
  • 非托管内存是直接由操作系统管理的内存,不受.NET运行时(CLR)的管理。
    • 性能优化:非托管内存访问速度更快,因为它不受.NET运行时的垃圾回收和类型检查等开销的影响。对于需要频繁访问大量数据的场景,将数据放到非托管内存可以提高程序的执行效率。
    • 与外部代码交互:有时候需要与使用非托管内存的外部库或API进行交互。将数据放到非托管内存可以方便地与这些外部代码进行数据交换和共享。
    • 非托管内存需要手动管理内存生命周期、容易引起内存泄漏和潜在的安全漏洞

占位 https://www.cnblogs.com/Ar4te-blog/p/18076299

简单示例

public class Program
{
  public static void Main()
  {
    IntPtr tmpPtr = IntPtr.Zero;
    var bytes = Encoding.UTF8.GetBytes("Test");
    var bytes2 = new byte[bytes.Length];
    try
    {
      ///申请非托管内存
      tmpPtr = Marshal.AllocHGlobal(bytes.Length * 2);
      ///将变量复制到非托管内存
      Marshal.Copy(bytes, 0, tmpPtr, bytes.Length);
      ///从非托管内存复制到数组
      Marshal.Copy(tmpPtr, bytes2, 0, bytes.Length);
      ///释放内存
      Marshal.FreeGlobal(tmpPtr);
    }
    catch(Exception)
    {
      if(tmpPtr != IntPtr.Zero)
      {
         Marshal.FreeGlobal(tmpPtr);
      }
    }
    Console.WriteLine(Encoding.UTF8.GetString(bytes2));
    Console.ReadKey();
  }
}

标签:tmpPtr,托管,bytes,Length,内存,简单,Marshal
From: https://www.cnblogs.com/Ar4te-blog/p/18076299

相关文章

  • spring boot使用MongoRepository简单的CRUD
    简单的CRUD首先,定义一个实体类,例如User:@DocumentpublicclassUser{@IdprivateStringid;privateStringname;privateintage;//构造函数、getter和setter省略...}接下来,定义一个继承自MongoRepository的接口,例如UserRepository:publicint......
  • 字符串函数和内存函数
    简介:本文将介绍常使用的字符串函数和内存函数,以及对其进行模拟实现,以便能够更好的理解这些函数的使用1、常见的字符串函数常用的字符串函数有strcpy,strcat,strcmp,strncpy,strncat,strncmp,strstr等。这些函数是针对字符串进行操作的,这些函数都需要包含头文件string.h,下面逐......
  • 工作中遇到的tab提升问题,简单记录一下
    Tabenhancement;应用场景当tab足够多时,进行Tab功能提升。由上图实现下图。前期css简单处理下,例如:tab最大宽度,tab超出文本省略号。开始处理逻辑:当tab不够多不足以出现滚动条时:此时也不需要过多的逻辑,只有删除tab后的选中逻辑;当tab足够多足以出现滚动条时:我们新建一个......
  • 最简单的python爬虫案例,适合入门学习
    用python从网页爬取数据,网上相关文章很多,但能让零基础初学者轻松上手的却很少。可能是有的作者觉得有些知识点太简单不值得花费精力讲,结果是难者不会会者不难,初学者常常因此而蒙圈。本人也是小白,刚摸索着爬了两个简单的网页数据,经历了初学者易犯的各种糊涂,特总结分享一下,希......
  • Python爬虫案例:简单获取股票、指数、三大报表数据
    Python爬虫案例:简单获取股票、指数、三大报表数据文章目录Python爬虫案例:简单获取股票、指数、三大报表数据介绍1.准备工作2.以不同股票、指数为行,爬取不同日期的数据调用tushare库获取数据,并保存到本地baostock库获取单支股票的详细信息3.爬取三大报表数据使用ak......
  • 使用useContext和useReducer实现类似于redux的简单状态管理
    useContext和useReducer的联合用法(实现多组件多状态管理)useReduceruseReducer(reducer,initialArg,init?)参数reducer:(state:S,action:A)=>newState:S;用于更新state的纯函数。参数为state和action,返回值是更新后的state。state与action可以是任意合法值。initi......
  • 实验1 C语言输入输出和简单程序编写
    task1_1.c1#include<stdio.h>2intmain()3{4printf("O\n");5printf("<H>\n");6printf("II\n");7printf("O\n");8printf("<H>\n");9prin......
  • Qt opengl和qlabel的update同时更新,内存泄漏问题
    工作要做一个类似播放器的软件,但是需要自己解码,然后可能多张图像合成再显示,所以不能直接用QT播放视频的模块,就用了QOpenGLWidget来渲染。后面发现内存一直在涨,一直以为是自己的原因,因为解码分配的内存挺多的,折腾了快一个月了,后面发现是update频繁更新导致;如下代码,XVideoWidget继......
  • 【译】Based:简单线性注意力语言模型平衡召回-吞吐量权衡
    原文:hazyresearch.stanford.edu/blog/2024-03-03-based全体团队:Simran,Sabri,Michael*,Aman,Silas,Dylan,James,Atri,ChrisArxiv:arxiv.org/abs/2402.18668代码:github.com/HazyResearch/based在ICLR论文(以及博客文章)中,我们在去年年底分享了一个发现,许多高效的架构(例如Mamba,RWKV,Hyena......
  • Python3 stdout read readline 阻塞情况简单说明
         Python3stdoutreadreadline阻塞情况简单说明 执行命令行,并获取返回结果。代码1:process=subprocess.Popen(cmd_string,stdout=subprocess.PIPE,\      universal_newlines=True,\      stderr=subprocess.PIPE,\    ......