博客
关于我
内存访问冲突
阅读量:731 次
发布时间:2019-03-21

本文共 1011 字,大约阅读时间需要 3 分钟。

Shaun的问题

我遇到了内存访问冲突的问题。这可能是在同一段内存被多个任务访问时发生的。问题又来自一个简单的例子:

var val = 10func plus(iVal: inout Int) {    iVal += val}plus(iVal: &val)print(val)

编译器报错说在访问val的时候出现了共享访问冲突。为什么呢?

我觉得这可能是因为在函数调用时,val这个变量被多个任务同时读取或者修改了。而iVal只是一个参数变量,理论上两个val其实指向同一个内存地址。

所以,这可能是因为“共享访问冲突”犯了一个常见的错误:如果两个任务尝试同时读取或修改同一个内存区域,尤其是写入操作,必须是互斥的。很多时候,共享访问冲突可以通过互斥锁或者其他机制来避免。

但同样,我看到另一个例子涉及元组类型的显示共享访问冲突:

func duce(_ long: inout Int , _ short: inout Int) {    let dif = long - short    long -= dif    short -= dif}func test() {    var tuple1 = (long:100, short:50)    duce(&tuple1.long, &tuple1.short)}test()

编译器报告说同一模块的多个任务访问同一个内存区域。这又是什么意思呢?我猜测这可能与内存管理模式有关。

我注意到,当我在全局区使用类似上面的代码时,会导致共享访问冲突。但当我将相同的代码写入局部变量时,它不再有问题了。这可能意味着全局区内存管理和栈区内存管理在某些方面是不一样的。

在全局区,可能会有更多的并发访问同一段内存,这需要更高层次的互斥控制。而在栈区,函数调用的上下文可能有助于避免这些问题。

这可能意味着,在全局区,连锁结构和互斥访问需要更谨慎地进行管理。或者,这可能和整块内存的可见性和访问方式有关。

总之,我需要进一步理解Swift内存管理的细节,尤其是在全局区和栈区之间如何处理内存的可见性和互斥访问。

如果知道更多的话,我可以更好地理解如何避免这些问题。

经过思考,我觉得这可能涉及到C指针类型的不可见性和栈内存分配的不同机制。

或许,全局区中的内存是共享的,而栈区的内存是独立分配的。

不过,具体的实现细节可能比较复杂,我需要进一步研究和实验才能得出结论。

转载地址:http://kprgz.baihongyu.com/

你可能感兴趣的文章
nmap指纹识别要点以及又快又准之方法
查看>>
Nmap渗透测试指南之指纹识别与探测、伺机而动
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>