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

    swift 内存安全

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

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

    Swift | 内存安全

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

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

    Swift基础 内存安全

    Swift基础 - 内存安全 翻译自:https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html 默认情况下,Swift 可以防止代码中出现不安全行为 return number + 1 } var myNumber = 1 myNumber = oneMore(than: myNumber) print(myNumber) // Prints “2” 例如: func balance(_ x: inout Int, _ y: inout Int) { ​ let sum = x + y ​ x = sum / 2 ​ y = sum 限制重叠访问结构属性并不总是必要的,以保持内存安全。内存安全是理想的保证,但独家访问是比内存安全更严格的要求——这意味着一些代码保留了内存安全,即使它违反了对内存的独家访问。 如果编译器能够证明对内存的非排他性访问仍然是安全的,Swift允许此内存安全代码。

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

    线程安全&Java内存模型

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

    81820发布于 2020-08-11
  • 来自专栏C语言讲解

    动态内存管理(2)

    ,存在内存泄漏的问题(而且出了GetMemory函数之后想释放也释放不了,因为p所在的那块内存空间已经被销毁了,已经还给操作系统了)。 void* p2) { return ((PeoInfo*)p1)->age - ((PeoInfo*)p2)->age; } void SortContact(Contact* pc) { assert sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。 所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。 如果你在内存空间中多次开辟空间,内存碎片(内存和内存之间留下的缝)就越多,这些内存碎片就可能不能被很好地利用,内存的利用率就越低;同时,访问速度也会变低。

    43510编辑于 2024-02-08
  • 来自专栏嵌入式学习

    结构体内存对齐——2

    colormap; char bgcolor; char ratio; }__attribute__ ((aligned(4))); 对齐到4字节 = 3+3+2+ 4+1+1+1+1 = 16 struct gif_hdr v1 = {1,2,3,4,5,6,7,8,9,10,11}; struct gif_hdr *dsptr;

    59320发布于 2020-09-07
  • 来自专栏我的计算机成长

    动态内存管理(2)

    NULL; GetMemory(&str); strcpy(str, "hello world"); printf(str); free(str); str = NULL; } 4.2 题目2: 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。 2. sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。   像柔性数组就有两个好处: 第一个好处是:方便内存释放 如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。 所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。

    41910编辑于 2024-01-23
  • 来自专栏c++与qt学习

    Java内存模型和线程安全

    Java内存模型和线程安全 Java内存模型 引言 volatile关键字 synchronized关键字 Java线程 Java线程安全 synchronized锁优化 锁优化技巧列举 自旋锁 锁消除 volatile修饰符提供的两个作用并没有体现出其一定是并发安全的,上面的例子也证明了,那么为什么呢? 状态转换: ---- Java线程安全 不可变对象一定是线程安全的,如: String,Integer等 synchronized关键字实现互斥同步: 通过monitorEnter和monitorExit synchronized (Main.class) { i++; } } } private static void display2( ; i < 10; i++) { i++; } } } private static void display2(

    88360编辑于 2023-02-10
  • 来自专栏QQ音乐技术团队的专栏

    全民K歌内存篇2——虚拟内存浅析

    《全民K歌内存篇1——线上监控与综合治理》 《全民K歌内存篇2——虚拟内存浅析》 《全民K歌内存篇3——native内存分析与监控》 一、简介 在多任务操作系统中,每个进程都拥有独立的虚拟地址空间,通过虚拟地址进行内存访问主要具备以下几点优势 进行了压缩,但仍会占用部分内存 二、地址空间大小 2.1 32位的地址空间 ARM 32位的CPU架构可使用的地址空间大小为2^32=4GB,并需要保留一部分给内核使用。 在Linux实现里,提供了三种虚拟地址空间分配的参数:VMSPLIT_3G、VMSPLIT_2G、 VMSPLIT_1G,代表用户态可访问的虚拟地址空间大小,如下: ? 512GB; 2:大量申请物理内存导致内存紧张时,后台应用及服务会逐一被LowMemoryKiller杀死,继续申请时,前台应用亦不能幸免,表现为闪退,但无法被Bugly捕获。 对merge1.txt和merge2.txt中相同的mapping内容进行增量计算,并分类汇总。

    5.1K30发布于 2021-03-04
  • 来自专栏编程思考

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

    软件安全一直是软件开发和互联网行业中的一个必先要考虑的问题,而编程语言的内存安全则是软件安全的一个重要分支。 在编程语言中,内存安全的重要性体现在多个方面,对于程序的稳定性、可靠性以及安全性都具有至关重要的影响。什么是内存安全的编程语言? 内存安全的编程语言是指那些能够自动管理内存,向编程人员隐藏内存布局,防止内存损坏错误的编程语言。内存安全有助于防止程序崩溃和错误。 当编程语言能够自动管理内存,避免内存泄漏、野指针等内存安全问题时,程序更有可能稳定运行。其次,内存安全能够提高软件的质量和可靠性。 与此相对,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 如果是这种情况,程序会执行try,finally以及finally块之后的代码; 2:try语句块抛出了异常并且catch有匹配的异常。 这里又可以分为2种情况。

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

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

    未来十年,软件行业将加速向内存安全转变。 2024 年 3 月 4 号,Google 官方博客[1]发文,宣布《安全设计 - Google 对内存安全的洞察》白皮书[2]。 这份白皮书中深入探讨了数据、解决内存不安全性的挑战,并讨论了实现内存安全的可能方法及其权衡。 相关定义 内存安全漏洞 内存安全漏洞是指当程序在内存访问构成未定义行为的状态下允许执行读取或写入内存的语句时产生的。 解决内存安全漏洞的途径 安全编码 解决内存安全问题需要采取多管齐下的方法,包括: 通过安全编码来防止内存安全漏洞。 通过增加攻击的成本来减轻内存安全漏洞。 尽早在开发生命周期中检测内存安全漏洞。 此外,安全抽象本身通常是对底层不安全构造的包装 API。例如,围绕堆内存分配/释放的安全抽象的实现最终需要处理原始内存,例如mmap(2)。

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

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

    ____ char2在哪里?____ *char2在哪里?___ pChar3在哪里?____ *pChar3在哪里?____ ptr1在哪里?____ *ptr1在哪里? 2.C语言动态内存管理方式:malloc/calloc/realloc/free 详情可查看土土之前的博客——C语言动态内存管理函数 C++兼容C语言,所以在C++中也可以使用C语言的动态内存管理函数来开辟和释放空间 2.malloc函数用于在堆上动态分配内存空间,其实现原理可以简要概括为以下步骤: 首先,malloc函数会接收用户请求的内存大小,并计算需要分配的总内存大小(包括额外的管理信息)。 例如: void MemoryLeaks() { // 1.内存申请了忘记释放 int* p1 = (int*)malloc(sizeof(int)); int* p2 = new int; // 2. 异常安全问题 int* p3 = new int[10]; Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放. delete[] p3; } ☑️ 内存泄漏分类

    52110编辑于 2024-05-03
  • 来自专栏linux驱动个人学习

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

    前面构建内存管理框架,已经将内存管理node节点设置完毕,接下来将是管理区和页面管理的构建。 usable_startpfn, zone_movable_pfn[nid]) : usable_startpfn; } goto out2; usable_nodes--; if (usable_nodes && required_kernelcore > usable_nodes) goto restart; out2: min(usable_startpfn, zone_movable_pfn[nid]) : usable_startpfn; } goto out2; } 而在out2的标签内的代码则是用于将movable管理区的起始地址做MAX_ORDER_NR_PAGES对齐操作。 末尾out的标签则仅是恢复node_states[]而已。

    1.2K20发布于 2019-10-08
  • 来自专栏学院君的专栏

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

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

    1.8K20编辑于 2023-03-03
  • 来自专栏学而时习之

    go源码剖析2 内存分配2 初始化

    初始化时的虚拟地址空间: 因为内存分期和垃圾回收算法都依赖要连续的地址, 所以在初始化阶段, 预先保留了很大的一段虚拟地址空间. 保留地址空间, 并不会分配内存. 三个区域: 上述的虚拟的地址空间被划分成了三个区域: 页所属span指针数组 GC标记位图 用户内存分配区域 spans 512M bitmap 32GB arena 512GB 简单的说, 就是用三个数组组成了一个高性能内存管理结构 使用arena地址向操作系统申请内存, 其大小决定了可分配用户内存的上限.

    58540发布于 2020-05-19
  • 来自专栏python基础文章

    网络安全——网络层安全协议(2)

    (2)广域网:路由器到路由器模式,网关到网关模式。 (3)远程访问:拨号客户机,专网对Internet的访问。   (1)安全体系结构。包含一般的概念、安全需求和定义IPSec的技术机制。  (2)ESP协议。加密IP数据包的默认值、头部格式以及与加密封装相关的其他条款。  (3)AH协议。 SA(安全关联))表示了策略实施的具体细节,包括源/目的地址、应用协议、SPI(安全策略索引)等;SAD为进入和外出包处理维持一个活动的SA列表;SPD决定了整个VPN的安全需求。 ---- 2. (2)在IPSec驱动程序数据库中查找相匹配的出站SA,并将SA中的SPI插人IPSec包头。 (3)对数据包签名(完整性检查);如果要求机密,则另外加密数据包。 (2)通过目的地址和SPI,在IPSec驱动程序数据库中查找相匹配的人站SA。 (3)检查签名,对数据包进行解密(如果是加密包的话)。

    1.2K20编辑于 2023-10-15
  • 来自专栏网络安全攻防

    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); } } 随后运行程序生成载荷: 随后打入内存马

    72210编辑于 2025-01-07
  • AI网络攻击与内存安全代码防御

    内存安全代码创造更强大的防御最容易的起点是采用内存安全语言。各机构只需更改其编码人员使用的编程语言,就能对其安全性产生巨大的积极影响。 某机构(Google)和某机构(Microsoft)都发现,大约70%的严重安全漏洞归结于软件管理内存的方式。像C和C++这样的语言将每个内存决策留给开发者。 像Rust这样的语言更进一步;它们使最危险的内存错误类别在结构上变得不可能,而不仅仅是更难犯。内存安全语言从源头上解决了问题,但用C和C++编写的遗留代码库在未来几十年仍将是现实。 软件沙箱技术通过处理内存安全语言无法处理的问题来补充它们——即遏制确实存在的漏洞的爆炸半径。 用内存安全语言编写的代码——通过强大的沙箱边界隔离并有选择地进行形式化验证——呈现出一个更小且限制更多的目标。

    30610编辑于 2026-05-21
领券