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

    swift 内存安全

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

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

    Swift | 内存安全

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

    88120发布于 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允许此内存安全代码。 如果编译器无法证明访问是安全的,则不允许访问。

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

    线程安全&Java内存模型

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

    66720发布于 2020-08-11
  • 来自专栏c++与qt学习

    Java内存模型和线程安全

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

    69760编辑于 2023-02-10
  • 来自专栏编程思考

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

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

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

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

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

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

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

    首先要明确的一点是:不管try是否抛出异常,finally语句块都会执行。 小心注意6!!

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

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

    这份白皮书中深入探讨了数据、解决内存安全性的挑战,并讨论了实现内存安全的可能方法及其权衡。 相关定义 内存安全漏洞 内存安全漏洞是指当程序在内存访问构成未定义行为的状态下允许执行读取或写入内存的语句时产生的。 谷歌内部的漏洞研究反复证明,缺乏内存安全会削弱重要的安全边界。 内存安全漏洞的类别 空间安全漏洞(例如“缓冲区溢出”,“越界访问”)发生在内存访问引用超出被访问对象分配区域之外的内存时。 解决内存安全漏洞的途径 安全编码 解决内存安全问题需要采取多管齐下的方法,包括: 通过安全编码来防止内存安全漏洞。 通过增加攻击的成本来减轻内存安全漏洞。 尽早在开发生命周期中检测内存安全漏洞。 这预防了数百个内存安全漏洞的发生:“随着进入 Android 的新的不安全内存代码的减少,内存安全漏洞的数量也相应减少。2022 年是 Android 的内存安全漏洞不再占大多数的第一年。

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

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

    Redis 的安全隐患 线上运行的 Redis 服务主要有哪些安全隐患呢? 以上这些都是一些最基本最常见的 Redis 安全隐患,要规避这些问题,我们该怎么做呢? 端口安全 首先,我们可以通过配置 Redis 来确保服务端的端口安全,阻止恶意用户建立连接。 关于端口安全问题造成的线上事故案例,可以阅读学院君之前发布的这篇教程:Laravel 学院今天凌晨四点到上午十点不能访问问题定位及修复细节通报。 指令安全 前面我们介绍 Redis 安全隐患的时候提到恶意用户建立连接后可能执行 flushdb 之类的指令清空 Redis 内存数据库,现在,我们已经通过配置 bind 或者 requirepass "" 内存使用与写入频率限制 接下来,我们来看如何避免大量高频的写入导致 Redis 内存耗尽的问题。

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

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

    内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。 堆用于程序运行时动态内存分配,堆是可以上增长的。 数据段–存储全局数据和静态数据。 ,内存泄漏的危害 ✨什么是内存泄漏: 内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。 内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 异常安全问题 int* p3 = new int[10]; Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放. delete[] p3; } ☑️ 内存泄漏分类 由于C++是一种底层语言,在开发过程中需要手动分配和释放内存,这就要求程序员负责管理动态分配的内存,确保内存的正确分配和释放,避免内存泄漏和悬挂指针等问题。

    34310编辑于 2024-05-03
  • 来自专栏网络安全攻防

    JAVA安全之Java Agent打内存

    IllegalClassFormatException; } (3) VirtualMachine类 com.sun.tools.attach.VirtualMachine类可以实现获取JVM信息,内存 ,成功更改目标类的方法内容中的代码 打内存马 下面我们通过Java Agent技术来修改一些JVM一定会调用并且Hook之后不会影响正常业务逻辑的的方法来实现内存马: 环境构建 这里我们使用Shiro漏洞利用环境来作为演示环境 System.out.printf(ciphertext.toString()); } } 随后替换请求报文中的RememberMe后重新发送请求(引入Ysoserial作为依赖) 进入到容器查看执行结果: 打内存马 第一阶段:内存马构造 首先构造AgentMain.jar文件 import java.lang.instrument.Instrumentation; public class MyAgent{ output, pwd.length, cipher.length); return Base64.encode(output); } } 随后运行程序生成载荷: 随后打入内存

    43610编辑于 2025-01-07
  • 来自专栏欢迎加入非凸科技

    Android 平台中的 Rust,实现内存安全

    安卓平台上代码的正确性是每个安卓版本的安全性、稳定性和质量的首要任务。C 和 C++ 中的内存安全错误仍然是最难解决的不正确性来源,一直占 Android 高严重度安全漏洞的 70% 左右。 Rust 通过使用编译时检查来强制对象生存期/所有权和运行时检查来确保内存访问是有效的,从而提供内存安全保证。 Rust 对一系列其他语言方面进行了现代化改造,从而提高了代码的正确性:1.内存安全 -通过编译器和运行时检查的组合来强制执行内存安全。2.数据并发 -防止数据竞争。可以轻松编写高效、线程安全的代码。 6.初始化 -要求在使用前初始化所有变量,从而避免无意中初始化为不安全值的问题。 7.更安全的整数处理 -Rust 调试版本会启用溢出清理,鼓励程序员指定 wrapping_add 如果他们真的打算计算溢出,或者如果他们不打算溢出则指定 saturating_add。图片图片

    76010编辑于 2022-07-07
  • 来自专栏欢迎加入非凸科技

    学习Rust,了解内存和线程安全问题

    Rust编程语言旨在确保内存安全,它混合使用编译时静态检查和运行时锁来阻止程序访问无效指针或在没有适当同步的情况下跨线程共享内存。 因为值只有一个所有者,所有者可以安全地修改值、销毁值或将值转移给新的所有者。 3.独一无二的借用。如果你对T类型的值有惟一的访问权,则可以使用借用对该值的惟一引用。 8.线程安全。Rust通过标准库内置了两个Trait,用来标记其他线程是否可安全访问的类型: T: Send 意味着在单个其他线程上访问T是安全的,其中在执行时间线上每一个线程具有一次性的独占访问权。 当值不发生改变修改时,共享是安全的,而当值不发生共享时,修改是安全的。但是如果我们想既要共享又要可改变一个值,怎么办呢? Rust标准库为这种共享的可修改性提供了独特的实现机制,即UnsafeCell,它创造性的结合Send、Sync Trait以实现混合静态检查和运行时检查来保证内存安全和线程安全

    65210编辑于 2022-04-06
  • 来自专栏菲宇

    Tomcat优化(内存,并发,缓存,安全,网络,系统等)

    一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数 JAVA_OPTS 参数说明   -server 启用jdk 的 server 版   -Xms java虚拟机初始化时的最小内存   -Xmx java虚拟机可使用的最大内存   -XX: PermSize 内存永久保留区域   -XX:MaxPermSize 内存最大永久保留区域 3.配置示例: JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M 为了提高处理能力,应设置为 false   redirectPort: 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口   acceptAccount: 4、应用程序安全 关闭war自动部署 unpackWARs="false" autoDeploy="false"。

    9.8K64发布于 2019-06-12
  • 来自专栏H2Cloud

    安全编程-c++野指针和内存泄漏

    摘要:   尽管C++ 野指针和内存泄漏一直被诟病,但是在实时性很强的应用场合,c++ 仍然是不二之选。 游戏服务器开发仍然使用c++ 作为主语言,但是大多结合动态脚本技术,一方面规避了野指针和内存泄露,一方面获得了开发效率和扩展性的红利。 这也是shared_ptr的使用误区,所以本人建议尽量shared_ptr和weak_ptr结合用,否则野指针问题解决了,内存泄漏问题又来了。 内存泄漏: 野指针问题可以通过采用良好的编程范式,尽量规避,但总计c++规避内存泄漏的方法却很为难,简单而言尽量保证对象的分配和释放(分别)是单个入口的,这样大部分问题都可以拦截在code review 使用shared_ptr要尽量小心,否则可能导致对象无法释放,导致内存泄漏。 可以定时输出当前所有对象的数量,来分析是否有内存泄漏,或者内存泄漏是有哪些对象引起的。

    1.7K50发布于 2018-03-09
  • 来自专栏运维开发王义杰

    深入浅出Rust内存安全:构建更安全、高效的系统应用

    本文旨在深入探讨内存安全的概念、Rust在内存安全方面的独到之处,以及这些特性对系统开发的深远影响。 内存安全概述 在讨论Rust的内存安全之前,我们先来理解一下内存安全这个概念。 内存安全是指在程序运行过程中,对内存访问的控制,保证程序可以正确、安全地处理内存中的数据。不正确的内存访问可能导致各种严重问题,比如数据泄露、程序崩溃和安全漏洞等。 内存安全对系统开发的重要性 在系统级开发中,程序需要直接与硬件交互,控制资源分配,因此内存安全尤为重要。不正确的内存操作不仅会导致程序本身的崩溃,还可能影响整个系统的稳定性和安全性。 通过采用Rust这样的内存安全语言,开发者可以: 减少安全漏洞:自动的内存管理减少了由于手动内存管理导致的漏洞。 提高开发效率:编译时的严格检查减少了运行时调试和修复内存问题的时间。 结论 内存安全是系统级开发中不可或缺的一环,它直接关系到程序的稳定性、安全性和效率。Rust语言通过其独特的所有权模型和编译时检查,为内存安全提供了强有力的保障。

    1.3K10编辑于 2024-02-05
  • 来自专栏Linyb极客之路

    从Java内存模型角度理解安全初始化

    那什么是需要的时候呢,JVM将这个问题抛给了程序,要求在代码中使用同步机制来保证多线程安全。 正因此存在上面所述的硬件能力和线程安全需求的差异,才导致需要在代码中使用同步机制来保证多线程安全安全发布与内存模型 对象共享:Java并发环境中的烦心事中曾介绍过安全发布和数据共享的问题,而造成不正确的发布的根源就在于发布对象的操作和访问对象的操作之间缺少Happens-Before关系。 请看下面这个例子,这是一个不安全的懒加载,只有在第一次用到Resource对象时才会去初始化该对象。 真正线程安全的懒加载应该是这样的,通过同步机制上锁,让读操作和写操作满足Happens-Before规则。

    80630发布于 2018-10-24
  • 来自专栏让技术和时代并行

    您是否优先考虑内存安全的编程语言?

    来自五个不同国家政府的网络安全机构去年 12 月呼吁开发人员使用内存安全的编程语言。你准备好了吗? 虽然内存安全编程语言不是讨论主题,但它是一个重要的安全问题,应该被理解。 首先,快速解释内存安全内存安全编程语言。 这可以在美国网络安全和基础设施安全局 (CISA) 的一篇博客中找到,该博客呼吁开发人员采用内存安全的编程语言。 内存安全是一个重要的考虑因素,因为像 C++ 这样的语言缺乏内存安全是漏洞的一大来源。继续使用内存安全语言不一定会引入新的错误,但会增加它们发生的可能性(或者可能已经存在,但未被发现)。 内存安全语言不能保证您编写无错误的代码,但是由于较少担心内存问题,您将有更多的开销来处理其他安全问题……例如庞大的密钥。

    64010编辑于 2024-04-10
  • 安全函数】free_s ():对比 free () 解析 C 语言内存释放的安全升级

    在 C 语言动态内存管理中,标准库free()函数虽能回收内存,却存在野指针残留、重复释放崩溃、非法内存释放无预警三大安全痛点。 为解决这些问题,安全增强型函数free_s()应运而生 —— 它并非 C 标准库函数,而是常见于安全编程框架(如微软安全开发生命周期 SDK)或自定义内存管理模块,核心设计目标是 “在释放内存的同时,消除内存操作风险 核心定义与价值 free_s()是free()的安全增强版,本质功能仍是回收动态内存(malloc()/calloc()/realloc()申请的内存),但在基础功能之外,新增了三大安全特性: 自动将指向已释放内存的指针置为 free()的核心逻辑(维护空闲链表、合并内存碎片),但新增了三级安全校验和指针自动置 NULL步骤。 返回错误码 + 打印日志 适用场景 性能优先、简单内存操作 安全优先、复杂 / 多线程场景 free_s()作为free()的安全增强版,通过 “二级指针参数、三级安全校验、自动置 NULL” 三大特性

    11410编辑于 2026-01-21
领券