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

    swift 内存安全

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

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

    Swift | 内存安全

    简介 一般来说,Swift 会阻止代码中的不安全行为。例如,Swift 会保证变量在被使用前已经初始化,在释放某变量后其内存也会变得不可访问,以及检查数组索引是否存在越界错误。 4. In-Out 参数的访问 一个函数对其所有 in-out 参数具有长期写入访问(long-term write access)的能力。 编译器可以证明这样是内存安全的,这两个存储的属性不会以任何方式交互。 在保护内存安全时,限制结构体属性的重复访问并非是必须的。 内存安全是理想的保证,但是独占访问是一个比内存安全更严格的要求--这意味着即使有一些代码违反了独占访问的要求,它也可以是符合内存安全的要求的。 如果编译器可以证明对内存的非独占访问仍然是安全的,则 Swift 允许使用这种仅做到了内存安全的代码。

    1K20发布于 2021-11-26
  • 来自专栏惊羽-布壳儿

    jdk(4) - JVM内存

    JVM 运行时内存划分 1.1 整体分布 主要分为 : jvm 内存 计数器 : 利用自增特性,主持线程顺次执行栈中的指令; JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量 ,基础类型和对象的引用等; 本地方法栈 : 主要维护JNI相关的信息 堆 : 用于存放程序运行中创建的对象数据; 本地内存 元数据区 : 用于存放永久对象的区域; 直接内存 : 用于存放堆外内存, 直接使用操作系统本身内存的区域(如 NIO部分类库实例); image.png 图中,绿色为线程私有的,换色则属线程公用; 1.2 堆内存划分 年轻代 Eden : 新对象的存放之地;占用内存达到阈值后会触发 servivor0 : 幸存区,用于youngGC时,临时存放幸存的对象; servivor1 : 同servivor0; servivor0, servivor1 配合Eden,使得youngGC时,不产生内存碎片 ,同时保证了新生内存都在Eden区; 参考文章 : 为什么JVM新生代中有两个survivor?

    84710编辑于 2022-06-15
  • 来自专栏pandacode_cn

    Swift基础 内存安全

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

    83400编辑于 2023-07-17
  • 来自专栏开发笔记

    线程安全&Java内存模型

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

    81820发布于 2020-08-11
  • 来自专栏杨不易呀

    【JMM内存模型-4】JMM内存模型之CPU缓存策略

    CPU缓存策略原理 缓存概述 CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构 cpu缓存策略图 cpu读取数据时, 会先从自己的寄存器当中读取. 如果没有再从Cache当中读取数据.如果Cache当中也没能.再从内存当中获取.然后再依次缓存 多核CPU结构图 三级缓存 L1 Cache 分为数据缓存和指令缓存,逻辑核独占 CPU所有操作的数据全部在寄存器当中完成 Registers(寄存器组) `<1ns` L1 cache (一级缓存) `约1ns` L2 cache(二级缓存) `约3ns` L3cache(三级缓存) `约15ns` 主内存 计算机当中为了让效率更高,在读取数据时,是一块一块进行读取的 3. cache Line能够读取的大小是64个字节 cpu缓存一致性问题 假设cpu1从主内存当中读取一个共享数据i = 1,读取到cache 当中 进行数据的修改,把i修改为2 一、同时同一个cpu也从内存当中读取数据 此时读取的结构可能是1也可能是2 如果cpu1把写的结果写到到内存中, cpu2读取的就是2 如果cpu1没有把结果写回到主内存当中

    98520编辑于 2022-01-19
  • 来自专栏linux驱动个人学习

    Linux-3.14.12内存管理笔记【构建内存管理框架(4)】

    虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),但这里不准备复述什么,仅针对required_movablecore和required_kernelcore

    1K20发布于 2019-10-08
  • 来自专栏c++与qt学习

    Java内存模型和线程安全

    Java内存模型和线程安全 Java内存模型 引言 volatile关键字 synchronized关键字 Java线程 Java线程安全 synchronized锁优化 锁优化技巧列举 自旋锁 锁消除 高速缓存的出现主要是为了解决CPU运算速度和主内存速度不匹配而引入的缓冲模块 ---- 上图是java的内存模型,Java线程的数据读写都只能从工作内存获取,不同线程的工作内存是隔离的、 此处的工作内存主要对应线程私有的虚拟机栈部分 指令重排序只会在多线程情况下存在并发问题 ---- volatile修饰的变量一定是并发安全的吗? volatile修饰符提供的两个作用并没有体现出其一定是并发安全的,上面的例子也证明了,那么为什么呢? 状态转换: ---- Java线程安全 不可变对象一定是线程安全的,如: String,Integer等 synchronized关键字实现互斥同步: 通过monitorEnter和monitorExit

    87960编辑于 2023-02-10
  • 来自专栏云前端

    JS的内存管理及4种常见的内存泄漏

    举例来说,看一下以下声明: int n; // 4 bytes int x[4]; // array of 4 elements, each 4 bytes double m; // 8 bytes 编译器立刻就能算出这部分代码需要的空间 4 + 4 × 4 + 8 = 28 bytes. 在以上例子中,编译器清楚的制度每个变量所需内存。事实上,每当我们写入变量 n 时,这个变量在内部就被翻译成类似“内存地址4127963”了。 如果试图访问这里的 x[4] , 就会访问关联数据 m。 // 由 a1 和 a2 的元素串联成新的 4 个元素的数组 Using memory in JavaScript - 在JS中使用内存 在JS中使用内存,基本上就意味着对其读写。 'o2' 属性仍被 'o4' 变量引用,所以不能被释放 o4 = null; // 原本被 'o1' 引用的对象可以被gc了 Cycles are creating problems - 循环引用带来问题

    1.6K30发布于 2020-06-15
  • 来自专栏精讲JAVA

    Java 虚拟机 4:内存溢出

    www.cnblogs.com/xrq730/p/4833713.html 堆溢出 Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不被回收,那么对象数量达到最大堆容量限制后就会产生内存溢出异常了 解决方案的话,可以调大堆的大小或者从代码上检视是否存在某些对象生命周期过长、持有状态时间过长的情况,长时间少程序运行期间的内存消耗。 上面无限产生线程的场景,从另外一个角度说,就是为每个线程的栈分配的内存空间越大,反而越容易产生内存溢出。其实这也很好理解,操作系统分配给进程的内存是有限制的,比如32位的Windows限制为2GB。 虚拟机提供了了参数来控制Java堆和方法区这两部分内存的最大值,剩余内存为2GB-最大堆容量-最大方法区容量,程序计数器很小就忽略了,虚拟机进程本身的耗费也不算,剩下的内存就是栈的了。 每个线程分配到的栈容量越大,可建立的线程数自然就越少,建立线程时就越容易把剩下的内存耗尽。 StackOverFlowError这个异常,有错误堆栈可以阅读,比较好定位。

    1.1K20发布于 2018-07-30
  • 来自专栏闵开慧

    让XP支持4G内存

      4G内存已经成为很多中高档笔记本电脑的标准配置。前两篇文章介绍了WIN7系统4G内存的破解过程和4G内存的完美利用。但是,很多朋友还是习惯用32位 XP系统。 那么能不能让32位 XP系统也能完美支持4G内存呢,当然也是可以的。今天,我们就来介绍如何在32位XP系统完美破解4G内存限制。 第二步、安装内存盘   开启了PAE,并没有破解4G内存限制。需要利用多余的1G内存建立内存盘使用,就能完美利用全部4G内存了。 成功设置xp支持4g内存 现在内存很便宜,不想换系统又想用上4G,这是在网上找到的.不知有谁用过.效果怎样? 执行gpedit.msc打开“组策略”控制台 “计算机配置”->“Windows设置”->“安全设置”->“本地策略”->“用户权利指派” 双击右边“锁定内存中的页”(或名为"内存中锁定页"),在“本地安全策略设置

    8.7K110发布于 2018-03-30
  • 来自专栏编程思考

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

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

    1.4K30编辑于 2024-04-16
  • 来自专栏Android 开发者

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

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

    1.2K20编辑于 2022-03-24
  • 来自专栏浮躁的喧嚣

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

    try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码 首先要明确的一点是:不管try是否抛出异常,finally

    31210编辑于 2023-11-22
  • 来自专栏python基础文章

    网络安全——网络层IPSec安全协议(4)

    前言 在前一章讲解了IPSec采用的安全技术,那什么是IPSec安全协议呢?本章将会很透彻的讲解IPSec安全协议。 IPSec用来保护一条或多条主机与主机间、安全网关与安全网关间、安全网关与主机间的路径。 AH头是一个IPv6的扩展头按照RFC2460标准的规定:它的值是头长度减去一个64位,在认证数据为标准的96位时,这个域的值为4。 (3)保留字段:16位,该字段用于今后的扩充,设置为0。 (4)安全参数索引SPl:专有32位值,用以区分那些目的IP地址和安全协议类型相同,但算法不同的数据包。 (5)序列号:32位整数,它代表一个单调递增计数器的值。 通常,当用于IPv6时,AH出现在IPv6逐跳路由头之后,IPv6目的选项之前;而用于IPv4时,AH跟随主IPv4头。

    1.3K20编辑于 2023-10-15
  • 来自专栏Rust 编程

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

    未来十年,软件行业将加速向内存安全转变。 2024 年 3 月 4 号,Google 官方博客[1]发文,宣布《安全设计 - Google 对内存安全的洞察》白皮书[2]。 此类的方法被称为“**安全编码**[4]”,将易受漏洞影响的编码结构本身视为危险因素(即独立于可能引发的漏洞,并且额外考虑),并且致力于确保开发人员在常规编码实践中不会遇到这些危险因素。 相关定义 内存安全漏洞 内存安全漏洞是指当程序在内存访问构成未定义行为的状态下允许执行读取或写入内存的语句时产生的。 解决内存安全漏洞的途径 安全编码 解决内存安全问题需要采取多管齐下的方法,包括: 通过安全编码来防止内存安全漏洞。 通过增加攻击的成本来减轻内存安全漏洞。 尽早在开发生命周期中检测内存安全漏洞。 : 33% 在真实环境中被利用 微软:32% 的内存安全CVEs GWP-ASan:在多个生态系统中发现的 UAFs 比 OOBs 多 4 倍 运行时技术和权衡 已经探索了多种运行时仪器技术来解决时间安全问题

    1.9K10编辑于 2024-03-12
  • 来自专栏c/c++

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

    int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; const char * pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int) ); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); } 选择题: 选项: A.栈 B.堆 C.数据段 ; sizeof(pChar3),求指针大小,大小为4个或8个字节; strlen(pChar3),求字符串大小(遇到’/0’停止)是4个字节; sizeof(ptr1),求指针大小,大小为4个或 异常安全问题 int* p3 = new int[10]; Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放. delete[] p3; } ☑️ 内存泄漏分类

    52010编辑于 2024-05-03
  • 来自专栏学院君的专栏

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

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

    1.8K20编辑于 2023-03-03
  • 来自专栏架构师成长之路

    GO进阶(4) 深入Go的内存管理

    32位机器可以直接寻址4G空间,意思是每个应用程序都有4G内存空间可用。 虚拟内存一般分为以下4大块: 1,栈空间:特点是内存地址连续,先进后出,里面放了局部变量、函数形参、自动变量。 ,该策略会将内存分割成由 4、8、16、32 字节的内存块组成的链表,当我们向内存分配器申请 8 字节的内存时,它会在上图中找到满足条件的空闲内存块并返回。 如上图所示,微分配器已经在 16 字节的内存块中分配了 12 字节的对象,如果下一个待分配的对象小于 4 字节,它会直接使用上述内存块的剩余部分,减少内存碎片,不过该内存块只有所有对象都被标记为垃圾时才会回收 goroutine会占用4GB。      ,那么整个程序的运行效率和内存使用效率一定是最高的,但是手动分配内存会导致如下的两个问题: 不需要分配到堆上的对象分配到了堆上 — 浪费内存空间; 需要分配到堆上的对象分配到了栈上 — 悬挂指针、影响内存安全

    1.3K10编辑于 2023-02-27
  • 来自专栏技术杂记

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

    由于 innodb_buffer_pool_size 和 query_cache_size 都是我手动配置的,所以这个差异报告让我立刻注意到了 innodb_ibuf_max_size

    85310编辑于 2022-07-09
领券