首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏浮躁的喧嚣

    swift 内存安全

    Swift 会阻止你代码里不安全的行为。 例如,Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查 Swift 保证同时访问同一块内存时不会冲突,因为 Swift 自动管理内存,所以大部分时候你完全不需要考虑内存访问的事情 而如果你的代码确实存在冲突,那在编译时或者运行时就会得到错误 内存访问冲突 当你有两个访问符合下列的情况: 至少有一个是写访问 它们访问的是同一个存储地址 它们的访问在时间线上部分重叠

    22910编辑于 2023-11-22
  • 来自专栏Swift社区

    Swift | 内存安全

    简介 一般来说,Swift 会阻止代码中的不安全行为。例如,Swift 会保证变量在被使用前已经初始化,在释放某变量后其内存也会变得不可访问,以及检查数组索引是否存在越界错误。 在该方法中,自己和队友都指向内存中的同一位置--如下图所示。这两个写入访问引用相同的内存,并且它们重叠,从而产生了冲突。 6. 编译器可以证明这样是内存安全的,这两个存储的属性不会以任何方式交互。 在保护内存安全时,限制结构体属性的重复访问并非是必须的。 内存安全是理想的保证,但是独占访问是一个比内存安全更严格的要求--这意味着即使有一些代码违反了独占访问的要求,它也可以是符合内存安全的要求的。 如果编译器可以证明对内存的非独占访问仍然是安全的,则 Swift 允许使用这种仅做到了内存安全的代码。

    88520发布于 2021-11-26
  • 来自专栏pandacode_cn

    Swift基础 内存安全

    Swift基础 - 内存安全 翻译自:https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html 默认情况下,Swift 可以防止代码中出现不安全行为 ) ​ balance(&oscar.health, &oscar.energy) // OK } 在上面的示例中,奥斯卡的健康和能量作为两个内外参数来balance(_:_:)编译器可以证明内存安全得到保留 限制重叠访问结构属性并不总是必要的,以保持内存安全内存安全是理想的保证,但独家访问是比内存安全更严格的要求——这意味着一些代码保留了内存安全,即使它违反了对内存的独家访问。 如果编译器能够证明对内存的非排他性访问仍然是安全的,Swift允许此内存安全代码。 如果编译器无法证明访问是安全的,则不允许访问。

    53400编辑于 2023-07-17
  • 来自专栏又见苍岚

    Python CUDA 编程 - 6 - 共享内存

    CUDA编程中内存分为主机内存内存条)与设备内存(显存),为提高计算效率,需要设计程序降低内存的数据搬运,或使用快速的内存寄存数据。 共享内存 CPU和GPU组成异构计算架构,如果想从内存上优化程序,我们必须尽量减少主机与GPU设备间的数据拷贝,并将更多计算从主机端转移到GPU设备端,我们要尽量在设备端初始化数据,并计算中间数据,并尽量不做无意义的数据回写 GPU的内存结构如图所示:GPU的计算核心都在Streaming Multiprocessor(SM)上,SM里有计算核心可直接访问的寄存器(Register)和共享内存(Shared Memory); 多个SM可以读取显卡上的显存,包括全局内存(Global Memory)。 内存优化一般主要利用Shared Memory技术。下文将以矩阵乘法为例,展示如何使用Shared Memory来优化程序。

    2.1K10编辑于 2022-08-04
  • 来自专栏开发笔记

    线程安全&Java内存模型

    Java内存模型 Java内存模型(JMM)主要目标是定义多线程的情况下线程访问变量的规则。 JMM规定线程之间的共享变量存储在主内存中,每个线程都有一个本地内存(工作内存),本地内存存储了共享变量的副本。 ? 关于线程安全 什么是线程安全问题? (数据一致性问题) 如何解决线程安全问题? 核心思想:在同一时刻,只能有一个线程执行。 通过加锁使线程更加安全,也使程序的执行效率更低。 当一个线程对volatile修饰的变量进行读操作时,该线程直接读取主内存的变量。 volatile能否保证线程安全? 不能,保证线程安全需要同时具备原子性,可见性和有序性。 比较主内存的值和本地内存修改前的值是否一致,若一致,将修改后的值刷新到主内存,若不一致,当前线程放弃更新,将主内存数据刷新到本地内存,再次重试。

    67420发布于 2020-08-11
  • 来自专栏后端精进之路

    Spark系列 - (6) Spark 内存管理

    6. 由于Driver的内存管理相对来说较为简单,本文主要对Executor的内存的管理进行分析,上下文中的Spark内存均特指Executor的内存。 同时,Spark引入对外(Off-heap),使之可以直接在工作节点的系统内存中开辟空间,进一步优化内存的使用。 堆内内存受到JVM统一管理,堆外内存是直接向操作系统进行内存的申请和释放。 1. 除了没有other空间,堆外内存和堆内内存的划分方式相同,所有运行中的并发任务共享存储内存和执行内存。 6.2 内存空间管理 1. 统一内存管理 Spark1.6之后引入的统一内存管理机制,与静态内存管理的区别在于存储内存和执行内存共享同一块空间,可以动态占用对象的空间区域。

    1.3K31编辑于 2023-10-19
  • 来自专栏计算机学习

    xv6(3) 内存管理部分

    物理内存与虚拟内存建立映射,那就是页表了 xv6 因其功能少,物理内存与虚拟内存的特殊关系,虚拟内存管理这一块很弱,可能水平还是不够,我想了半天都没能把这一块儿很好地抽象出来,不过物理内存管理和建立映射这一块儿还是很明显的 分配某页/块就是将相应的位置 1,回收就是将相应的位置 0 空闲链表法 xv6 对于物理内存的组织管理使用的是空闲链表法。 再者也可以看出 xv6 并没有使用全部的 4G 地址空间,有很大一部分都没有使用,内核的为映射部分和物理地址空间的未映射部分两者大小是不一样的,可能图画得有些迷惑,拿出来说一下。 解决这两个问题,我们要来看看 xv6 的设计思路,当然只是看和内存相关比较紧密的部分: 最开始内核加载到物理地址 0x10 0000 处,xv6 内核很小,整个内核只有 200 多 K。 ,从这个宏定义可以看出,xv6 实际并没有用到 32 位全部的 4G 空间。

    65410编辑于 2023-12-05
  • 来自专栏c++与qt学习

    Java内存模型和线程安全

    Java内存模型和线程安全 Java内存模型 引言 volatile关键字 synchronized关键字 Java线程 Java线程安全 synchronized锁优化 锁优化技巧列举 自旋锁 锁消除 指令重排序只会在多线程情况下存在并发问题 ---- volatile修饰的变量一定是并发安全的吗? volatile修饰符提供的两个作用并没有体现出其一定是并发安全的,上面的例子也证明了,那么为什么呢? 状态转换: ---- Java线程安全 不可变对象一定是线程安全的,如: String,Integer等 synchronized关键字实现互斥同步: 通过monitorEnter和monitorExit JDK 6中引入了自适应自旋锁,相比于JDK 1.4.2简单的自旋锁实现而言,对自旋次数进行动态变更。 如果上一次自旋等待过程中成功获得某个对象锁,那么这一次会动态调大自旋次数。

    70460编辑于 2023-02-10
  • 来自专栏技术杂记

    Percona Server 5.1 内存过量消耗分析6

    testuser几个重要参数:innodb_buffer_pool_sizeinnodb_ibuf_max_size虽然最开始我的问题定位,锁定在配置上,但是我实在是找不出有什么参数配置问题,转而开始寻求内存泄漏方向的突破

    80610编辑于 2022-07-09
  • 来自专栏编程思考

    什么是内存安全的编程语言

    软件安全一直是软件开发和互联网行业中的一个必先要考虑的问题,而编程语言的内存安全则是软件安全的一个重要分支。 在编程语言中,内存安全的重要性体现在多个方面,对于程序的稳定性、可靠性以及安全性都具有至关重要的影响。什么是内存安全的编程语言? 内存安全的编程语言是指那些能够自动管理内存,向编程人员隐藏内存布局,防止内存损坏错误的编程语言。内存安全有助于防止程序崩溃和错误。 当编程语言能够自动管理内存,避免内存泄漏、野指针等内存安全问题时,程序更有可能稳定运行。其次,内存安全能够提高软件的质量和可靠性。 与此相对,C和C++等语言则被认为是内存安全的,因为它们允许直接操作内存地址,并且缺乏边界检查,因此在内存安全性方面常常陷入困境。内存安全时可能会发生什么?

    1.1K30编辑于 2024-04-16
  • 来自专栏啄木鸟软件测试

    安全测试工具(连载6

    2.3 Pangolin Pangolin(穿山甲)一款帮助渗透测试人员进行SQL注入测试的安全工具。它能够通过一系列非常简单的操作,达到最大化的攻击测试效果。 Pangolin是目前国内使用率最高的SQL注入测试的安全软件,可以说是网站安全测试人员的必备工具之一。 1. 产品介绍 其特点如下。 l全面的数据库支持。

    91820发布于 2019-12-12
  • 来自专栏悠扬前奏的博客

    JVM-6.内存分配和回收策略

    JVM-6.内存分配和回收策略 一般指在堆上分配内存 主要分配在新生代的Eden区上 启动了本地线程分配缓冲,有现在TLAB上分配 少数情况直接分配在老年代中 在Eden中优先分配 优先在Eden中分配 Eden中不够,发起一次Minor GC 大对象直接进入老年代 大对象指需要大量连续内存空间的Java对象,典型如较长的字符串和数组 目的是避免在Eden区和两个Survivor区之间发生大量的内存复制 Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代 空间分配担保 在Minor GC之前,JVM先检查老年代最大可用的连续空间是否大于新生代所有对象总空间: 如果大于,Minor GC确保安全 检查老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小: 如果大于,尝试进行一次Minor GC(有风险) 如果小于,或者HandlePromotionFailure设置为不允许茂县,则进行一次Full GC JDK6之后

    67940发布于 2019-05-28
  • 来自专栏C++/Linux

    【C++修炼之路】6. 内存管理

    new与operator delete函数(重点) 4.1 operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定义类型 6. C++中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原理 6. int* ptr4 = new int; // 动态申请一个int类型的空间并初始化为10 int* ptr5 = new int(10); // 动态申请10个int类型的空间 int* ptr6 = new int[3]; delete ptr4; delete ptr5; delete[] ptr6; } 我们发现,new的方式既可以给其初始化也可以不初始化。 ; // 2.异常安全问题 int* p3 = new int[10]; Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.

    86900编辑于 2023-03-28
  • 来自专栏Android补给站

    6招精通Bitmap内存优化,告别OOM!

    Bitmap内存占用分析 Bitmap对象的内存占用主要取决于以下两个因素: 图像尺寸: 图像的尺寸越大,占用的内存就越多。 ,其内存占用为: 1080 * 1920 * 4 = 8294400 字节 也就是说,这张图片占用了约 8 MB 的内存。 有了这些基础,针对Bitmap的优化方式就简单许多,主要有以下6种,下面详细来分析一下。 采样率压缩 采样率压缩是通过降低Bitmap的分辨率来减少其内存占用。 模式 描述 内存占用 ARGB_8888 每个像素包含8位透明度、8位红色、8位绿色和8位蓝色 4字节 RGB_565 每个像素包含5位红色、6位绿色和5位蓝色 2字节 ALPHA_8 每个像素包含8位透明度 本文介绍了6种常见的Bitmap优化技巧,大家可以根据实际需求选择合适的优化技巧。

    1.1K10编辑于 2024-04-11
  • 来自专栏Android 开发者

    使用内存安全工具提升应用质量和安全

    Android 内存安全工具是一个可帮助您提升应用质量和安全性的综合工具包。通过本文您可以了解到我们推出的各种内存安全工具及其使用场景,以及了解如何通过这些工具来找到并修复问题。 什么是内存安全错误 内存错误是指在使用 C 或 C++ 等原生语言处理内存时发生的错误。 使用内存安全工具可帮助您减少此类错误,从而改进用户体验。 使用内存安全工具 我们的任务是帮助开发者确保内存安全,帮助您避免在使用原生代码处理内存时造成错误和漏洞。 总结 Android 内存安全工具可以检测代码库中的内存错误,修复此类错误可帮助提高质量和安全性。确保内存安全的诀窍是使用内存安全工具运行代码找到错误,然后修复这些错误。

    96020编辑于 2022-03-24
  • 来自专栏LINUX阅码场

    CUDA 6中的统一内存模型

    曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容。 本文中提到的是2014年发布的CUDA6, CUDA6最重要的新特性就是支持统一内存模型(Unified Memory)。 CUDA 6中的统一内存模型 NVIDIA在CUDA 6中引入了统一内存模型 ( Unified Memory ),这是CUDA历史上最重要的编程模型改进之一。 统一内存模型为在GPU上运行C++代码提供了巨大帮助。 这篇文章的例子可以在Github上找到。 统一内存模型的光明前景 CUDA 6中关于统一内存模型的最令人兴奋的事情之一就是它仅仅是个开始。 想尽早地了解CUDA 6的统一内存模型,请在可用的CUDA 6工具包发行候选版中成为CUDA注册开发人员,以接收通知。

    3.5K31发布于 2020-07-02
  • 来自专栏浮躁的喧嚣

    内存管理--32:编写“异常安全代码”时留意内存管理问题

    try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码 首先要明确的一点是:不管try是否抛出异常,finally 小心注意6!! 整个try,catch,finally执行有以下几种情况: 1:try语句块没有抛出异常。 第一种,抛出的异常被后面的catch捕获,而catch又没有抛出新的异常,那么执行顺序是1356 ;第二种,如果catch里面又抛出新的异常,顺序是1345,然后将新的异常返回给方法调用者,6就不执行了 那么会执行try和finally里面的语句也就是15,然后将该异常返回给方法调用者,不执行6

    23110编辑于 2023-11-22
  • 来自专栏Rust 编程

    安全设计白皮书 | 谷歌对内存安全的洞察

    这份白皮书中深入探讨了数据、解决内存安全性的挑战,并讨论了实现内存安全的可能方法及其权衡。 谷歌当前对内存安全语言 Rust 的投入 谷歌正在积极投资于他们白皮书中概述的许多解决方案,并对美国联邦政府关于开源软件安全的请求[6]进行回应[7]。 相关定义 内存安全漏洞 内存安全漏洞是指当程序在内存访问构成未定义行为的状态下允许执行读取或写入内存的语句时产生的。 谷歌内部的漏洞研究反复证明,缺乏内存安全会削弱重要的安全边界。 内存安全漏洞的类别 空间安全漏洞(例如“缓冲区溢出”,“越界访问”)发生在内存访问引用超出被访问对象分配区域之外的内存时。 解决内存安全漏洞的途径 安全编码 解决内存安全问题需要采取多管齐下的方法,包括: 通过安全编码来防止内存安全漏洞。 通过增加攻击的成本来减轻内存安全漏洞。 尽早在开发生命周期中检测内存安全漏洞。

    1.4K10编辑于 2024-03-12
  • 来自专栏学院君的专栏

    安全地使用 Redis(上):端口安全、指令安全内存使用限制

    Redis 的安全隐患 线上运行的 Redis 服务主要有哪些安全隐患呢? 以上这些都是一些最基本最常见的 Redis 安全隐患,要规避这些问题,我们该怎么做呢? 端口安全 首先,我们可以通过配置 Redis 来确保服务端的端口安全,阻止恶意用户建立连接。 地址: bind 127.0.0.1 ::1 只有来自该配置项配置的客户端才能与基于这个配置文件启动的 Redis 服务端建立连接,默认值是 127.0.0.1(::1 表示本地 IP 地址的 IPv6 关于端口安全问题造成的线上事故案例,可以阅读学院君之前发布的这篇教程:Laravel 学院今天凌晨四点到上午十点不能访问问题定位及修复细节通报。 指令安全 前面我们介绍 Redis 安全隐患的时候提到恶意用户建立连接后可能执行 flushdb 之类的指令清空 Redis 内存数据库,现在,我们已经通过配置 bind 或者 requirepass

    1.6K20编辑于 2023-03-03
  • 来自专栏c/c++

    【C++】探索C++内存管理:机制揭秘与内存安全

    ptr4 = new int; // 动态申请一个int类型的空间并初始化为10 int* ptr5 = new int(10); // 动态申请10个int类型的空间 int* ptr6 = new int[10]; //释放空间 delete ptr4; delete ptr5; delete[] ptr6; } 这里不用计算开辟空间的大小也不需要进行类型的强制转换; 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释放空间 6. 内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 异常安全问题 int* p3 = new int[10]; Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放. delete[] p3; } ☑️ 内存泄漏分类

    35310编辑于 2024-05-03
领券