内存管理:一文读懂Linux内存组织结构及页面布局

内存管理:一文读懂Linux内存组织结构及页面布局,第1张

1、内存是什么?

1) 内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成;

2) 内存的特点是存取速率快,断电一般不保存数据,非持久化设备;

2、内存的作用

1) 暂时存放 cpu 的运算数据

2) 硬盘等外部存储器交换的数据

3) 保障 cpu 计算机的稳定性和高性能

1、linux 内存地址空间 Linux 内存管理全貌

2、内存地址——用户态&内核态

3、内存地址——MMU 地址转换

4、内存地址——分段机制

1) 段选择符

更多Linux内核视频教程文档资料免费领取后台私信【 内核 】自行获取。

内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

2) 分段实现

5、内存地址——分页机制(32 位)

6、用户态地址空间

7、内核态地址空间

8、进程内存空间

内存管理算法 ——对讨厌自己管理内存的人来说是天赐的礼物

1、内存碎片

1) 基本原理

2) 如何避免内存碎片

2、伙伴系统算法——组织结构

1) 概念

2) 外部碎片

3、伙伴系统算法——申请和回收

1) 申请算法

2) 回收算法

3) 条件

4、如何分配 4M 以上内存?

1) 为何限制大块内存分配

2) 内核中获取 4M 以上大内存的方法

5、伙伴系统——反碎片机制

1) 不可移动页

2) 可回收页

6、slab 算法——基本原理

1) 基本概念

2) 内部碎片

7、slab 分配器的结构

详细参考:

经典|图解Linux内存性能优化核心思想

8、slab 高速缓存

1) 普通高速缓存

2) 专用高速缓存

9、内核态内存池

1) 基本原理

2) 内核 API

10、用户态内存池

1) C++ 实例

11、DMA 内存

1) 什么是 DMA

2) DMA 信号

out of memory 的时代过去了吗?no,内存再充足也不可任性使用。

1、内存的使用场景

2、用户态内存分配函数

a) 如果当前连续内存块足够 realloc 的话,只是将 p 所指向的空间扩大,并返回 p 的指针地址。这个时候 q 和 p 指向的地址是一样的

b) 如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p 指向的内容 copy 到 q,返回 q。并将 p 所指向的内存空间删除

3、内核态内存分配函数

4、malloc 申请内存

5、缺页异常

6、用户进程访问内存分析

7、共享内存

1) 原理

2) shm 接口

1、C 内存泄露

2、C 野指针

3、C 资源访问冲突

4、STL 迭代器失效

错误示例:删除当前迭代器,迭代器会失效

正确示例:迭代器 erase 时,需保存下一个迭代器

5、C++ 11 智能指针

(1)原理分析:

(2)数据结构:

(3)使用方法:

6、C++ 11 更小更快更安全

六、 如何查看内存

可以通过 cat /proc/slabinfo 命令查看

可以通过 /proc/sys/vm/drop_caches来释放

假定父进程malloc的指针指向 0x12345678, fork 后,子进程中的指针也是指向 0x12345678,但是这两个地址都是虚拟内存地址 (virtual memory),经过内存地址转换后所对应的 物理地址 是不一样的。所以两个进城中的这两个地址相互之间没有任何关系。

(注1:在理解时,你可以认为fork后,这两个相同的虚拟地址指向的是不同的物理地址,这样方便理解父子进程之间的独立性)

(注2:但实际上,linux为了提高 fork 的效率,采用了 copy-on-write 技术,fork后,这两个虚拟地址实际上指向相同的物理地址(内存页),只有任何一个进程试图修改这个虚拟地址里的内容前,两个虚拟地址才会指向不同的物理地址(新的物理地址的内容从原物理地址中复制得到))

具体细节,你要去参考linux内存管理相关的内容。

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

海康摄像头 NET_DVR_ALLOC_RESOURCE_ERROR 41 SDK资源分配错误 原创

2019-07-17 09:50:11

1点赞

lzzdflg

码龄6年

关注

海康摄像头可通过NET_DVR_Init()初始化,在NET_DVR_Login_V40时报错

出现错误为 NET_DVR_ALLOC_RESOURCE_ERROR 41 SDK资源分配错误

解决方案:

将海康SDK中库目录与头文件目录中所有内容,拷贝到项目的程序运行目录下(就是debug目录下有程序的exe)

打开CSDN APP,看更多技术内容

Android聚合SDK母包反编译出包教程_apk反编译合并_潇曜的博客

SDK2 的sdk2_strings.xml中包含<string name="app_name">xx2</string> 那么,就算两个SDK的资源文件名是不一样的,但是由于xml中包含相同的节点,到回编译时候还是会报错,所以,需要在资源合并时候把相同的节点处理掉,一种解决方...

继续访问

C++中的那些坑_CurtainXT的博客_c++ struct 的坑

void*buffer=malloc(-1)// 实际会分配0xFFFFFFFF... bytes 1 11.除0,浮点溢出,算0的平方根等算数错误会导致未定义行为(NaN计算结果),或者导致代码被意外优化掉,导致代码在Release下崩溃。

继续访问

最新发布 海康威视错误代码文档大全【完整版】

海康威视错误代码文档大全

继续访问

海康威视错误代码说明(三)(错误代码:31~46)

海康威视错误代码说明 3 错误代码及说明 网络通讯库错误码 (31~46) 这里有错误代码 31 、 32 、 33 、34 、 35 、 36 、37 、38 、 39 、40 、 41 、 42 、 43 、 44 、 45 、46 错误名称 错误值 说明 NET_DVR_DVRVOICEOPENED 31 设备语音对讲被占用。 NET_DVR_TIMEINPUTERRO...

继续访问

春季总结(二)_迷之程序员的博客

14、sdk 现在可以谈谈API和SDK的区别了。 15、_stdcall dllexport与dllimport 1、智能指针 【C++】智能指针详解_Billy12138的博客-CSDN博客_智能指针 深入实践C++11智能指针_code_peak的博客-CSDN博客 ...

继续访问

海康威视同步登陆预览控制及源码.rar

海康威视java二次开发,HCNetSDK线程安全初始化,NET_DVR_Login_V30同步登陆及预览云台控制,NET_DVR_Login_V40同步异步登录预览及控制,官放demo并未给出java如何使用NET_DVR_Login_V40方法登录,这里实现了NET_DVR_Login_V40登录,项目可直接导入eclipse运行,包含官方32及64位最新demo,如果能程序正常运行切能学到知识,请给五星好评

海康威视sdk错误码大全

技术交流QQ群933925017 /全局错误码 begin***/ public static final int NET_DVR_NOERROR = 0//没有错误 public static final int NET_DVR_PASSWORD_ERROR = 1//用户名密码错误 public static final int NET_DVR_NOENOUGHPRI = 2//权限不足 public static final int NET_DVR_NOINIT = 3//没有初始化 .

继续访问

4、Android SDK命令行工具AAPT2

AAPT2(Android 资源打包工具)是一个Android SDK构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。 Android Gradle 插件 3.0.0 及更高版本默认情况下会启用 AAPT2,因此您通常不需要自行调用 aapt2。不过,如果您更愿意使用自己的终端和构建系统而不是 Android Studio,则可以从命令行使用

继续访问

海康威视(HIKVISION) JAVA SDK Demo成功运行

海康威视(HIKVISION) JAVA SDK Demo成功运行引子下载说明代码编译添加文件问题排查总结 引子 调海康的JAVA SDK花费时间较长,所以记录下,为其他小伙伴填填坑,提高一下效率。官方文档确实少,而且demo中的说明各种坑。 下载 官方SDK下载地址:https://www.hikvision.com/cn/download_more_570.html(64位SDK) 注意:官方...

继续访问

海康威视SDK接口调用的主要流程及预览模块

其中虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。 初始化SDK(NET_DVR_Init):对整个网络SDK系统的初始化,内存预分配等 *** 作。 用户注册设备(NET_DVR_Login_V40):实现用户的注册功能,注册成功后,返回的用户ID作为其他功能 *** 作的唯一标识,SDK允许最大注册个数为2048个。就设备而言,V3.0以上版本支持的设备允许有32个注册用户名,而且同时最多...

继续访问

参数配置模块流程

一.配置压缩参数(NET_DVR_COMPRESSIONCFG_V30) #include <stdio.h>#include <iostream>#include "Windows.h" #include "HCNetSDK.h" using namespace stdvoid main() { //--------------------------------------- // 初始化 NET_DVR_Init()//设置连接时间与重连

继续访问

海康工业相机SDK错误码常见场景解析

海康工业相机SDK错误码常见场景解析

继续访问

Windows系统错误代码-----故障检测用

Microsoft Windows 系统错误代码 0000 *** 作已成功完成。 0001 错误的函数。 0002 系统找不到指定的文件。 0003 系统找不到指定的路径。 0004 系统无法打开文件。 0005 拒绝访问。 000...

继续访问

使用 Docker Client 和 Go SDK 为容器分配 GPU 资源

❝本文转自博客园,原文:https://www.cnblogs.com/joexu01/p/16539619.html,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang背景深度学习的环境配置通常是一项比较麻烦的工作,尤其是在多个用户共享的服务器上。虽然 conda 集成了 virtualenv 这样的工具用来隔离不同的依赖环境,但这种解决方案仍然没办法统一地分配计...

继续访问

记海康sdk linux下的使用

由于需要用到海康的测温摄像头,所以应用海康的sdk时,踩了不少坑,上一篇的linux下调用so就是由于海康而踩坑的,这篇详细介绍Linux下海康sdk的调用。方便以后遇到相似问题,也防止更多的人踩坑。 海康sdk的调用在windows下很简单。去官网找它的demo就好。 https://www.hikvision.com/cn/download_more_570.html 根据你自己的系统 *** 作位数下载相应demo就好。然后运行后,可以通过断点形式找到你想要的代码。复制到你的项目中即可,而这里我主要使用的.

继续访问

多路解码器模块流程

主动解码(包括动态解码和轮巡解码) #include <stdio.h>#include <string.h>#include <iostream>#include "Windows.h" #include "HCNetSDK.h" using namespace stdvoid main() { int i=0,j=0BYTE byDispMode//初始化SDK NET_DVR_Init()/

继续访问

海康威视SDK:NET_DVR_GetDVRConfig failed Device does not support this function

sdk开发

继续访问

【无标题】关于摄像头的学习

[DllImport(@"PlayCtrl.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "printHello")] public extern unsafe static void printHello()[DllImport(@"PlayCtrl.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint ...

继续访问

热门推荐 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能

视频监控、人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头。本文章讲解海康的sdk方式。

继续访问

海康设备注册一直失败的问题

今天用JAVA对接海康设备,但是注册一直失败,ip、端口、用户名、密码都是正确的,一直百思不得其解,后来一番查询与排错,终于找到了原因,是因为没有初始化设备 初始化设备的代码(红框里的部分): if (!hCNetSDK.NET_DVR_Init()) { System.out.println(MachineName + ":初始化失败")...

继续访问

海康威视(Hikvision)基于设备SDK中链接错误error LNK2019和error LNK2001

背景:公司要开发海康基于设备的视频模块,看到官网64和32两个版本SDK,在这个64位PC当道的年代,没思考直接下载64版本。按照提示全部安装完毕。 问题出现:所有代码写完后,编译发现报一下错误: error LNK2001:无法解析的外部符号,__imp__NET_DVR_StopRealPlay等等全部是海康的API函数接口 问题分析:所有的lib和dll路径和目录都是正确的,lib引用

继续访问

sdk资源分配错误

海康

写评论

1

3

1

分享


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8958660.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-23
下一篇2023-04-23

发表评论

登录后才能评论

评论列表(0条)

    保存