问题标签 [unsafe-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 指针使用不当会导致这些所谓的“灾难”是什么?
我在我的程序中越来越多地使用指针,在阅读指针时,我发现的每一个指南或教程都说不正确地使用指针可能会产生“灾难性”的结果。
现在,我遇到了一些大内存泄漏的案例,指针取消引用了错误的指针变量,返回了不正确的值,但除此之外,没有发生任何“灾难性”事件;就像我的电脑和/或其他程序崩溃一样。
有人可以给我一个简单的代码示例,它肯定会产生“灾难性”的结果,也许还有一些发生的背景故事,以防你不小心使用了那段代码?我所说的“灾难性”结果是指可能会干扰其他程序或操作系统并可能使它们崩溃的代码。
c# - C#:从垃圾收集中保存委托(静态无选项)
我目前在 C dll 的包装类中使用静态委托,以避免指向不安全函数的委托被垃圾收集。
在我现在需要支持该类的多个实例之前,这一直很好。一种解决方法可能是保留静态代表的列表,但我想找到一个更简单的解决方案。
c++ - 自定义弱/强引用指针
我正在创建自己的弱/强引用指针关系的实现,我对配置感到困惑。当我有一个包含强引用的类,并且我想将强指针设置为另一个具有弱引用的类时,我应该传入一个weak_ref 指针的指针吗?
如果有人可以看一下这段代码并告诉我我会应用它,如果您发现任何其他问题,请告诉我。我把这三个文件放到了codepad文件中,这样这个页面就不会变得麻烦了。
WeakReference.h:http ://codepad.org/nNtRk4vO
StrongReference.h:http ://codepad.org/MGi0fZ4J
请不要将其变成“使用 boost,使用 std,使用 tr1”参数,我正在寻找有关此代码的帮助,而不是使用其他东西。
c++ - 弱/强引用指针关系
我一直在尝试编写自己的弱/强指针,但我并不清楚这种关系。我似乎遇到的所有事情都没有说清楚,而且经常一个文档会与另一个文档所说的相矛盾。任何人都可以详细解释弱/强指针关系,也许还有图像或代码示例?
(请不要只告诉我“使用boost”或“使用tr1”等。这不是功课,我想学习)。
c# - 将指向数组部分的指针作为 C# 中的参数传递
我只是在学习神经网络,我想让神经元的构造函数接收一个指向数组中一个部分的指针,该部分将是染色体。像这样的东西:
所以我会用这样的东西创建我的神经元:
是否可以在 C# 中执行此操作?我知道 C# 支持一些不安全的代码。但我不知道如何告诉编译器该行public Neuron(int* chromosomeSection)
不安全。
另外,我能否完成在 C++ 或 C 中会执行的所有操作?在开始这样做之前我应该注意什么问题?以前从未在 C# 中使用过不安全的代码。
c# - 不安全的指针迭代和位图 - 为什么 UInt64 更快?
我一直在做一些不安全的位图操作,并发现减少指针的增加次数可以带来一些很大的性能改进。我不确定为什么会这样,即使您在循环中执行了更多的按位操作,最好还是减少对指针的迭代。
因此,例如,不是使用 UInt32 迭代 32 位像素,而是使用 UInt64 迭代两个像素,并在一个周期内执行两次操作。
以下是通过读取两个像素并修改它们来完成的(当然,对于奇数宽度的图像,它会失败,但这只是为了测试)。
以下代码逐个像素地执行,比前面的代码慢 70% 左右:
有人可以澄清为什么增加指针比进行一些按位操作更昂贵的操作吗?
我正在使用 .NET 4 框架。
对于 C++ 来说,这样的事情可能是真的吗?
注意。32 位与 64 位两种方法的比率相等,但是两种方法在 64 位与 32 位上都慢了 20%?
编辑:正如 Porges 和 arul 所建议的,这可能是因为内存读取次数和分支开销减少。
编辑2:
经过一些测试,似乎从内存中读取更少的时间是答案:
使用此代码假设图像宽度可被 5 整除,您的速度将提高 400%:
然后使用这个:
c# - 什么时候在栈上分配一个固定大小的数组?
我有以下方法将字节从套接字流复制到磁盘:
我比较好奇的是:会buffer
分配在栈上还是堆上?可以肯定的是,我可以使此方法不安全,并将fixed
关键字添加到变量声明中,但如果我不必这样做,我不想这样做。
java - 在 java 中使用 Unsafe 写/读内存
我知道可以通过在 jvm 中使用 Unsafe 类直接写入和读取内存。
除了这确实不安全并且不知何故适得其反之外,我想知道谁/什么负责检查允许的内存位置的边界。并且如果有一些机制可以保护已经分配的内存被覆盖。与这个最新问题相关,一个人通过覆盖他不应该做的事情会造成什么可能的损害?好吧,最好将其改写为:可以写入的内存是哪种类型,或者其中已经存储了哪种信息?
谢谢
c# - 获取数组中第一个条目的指针
我想获取数组中第一个条目的指针。这就是我尝试的方式
得到以下编译错误。任何想法如何解决它?
您只能在固定语句初始化程序中获取未固定表达式的地址
c# - 将 UInt64 重新解释为结构
在我的代码中,我正在计算 UInt64 值,然后将其转换为:
单元格是一个结构。Marshal.SizeOf(new Cell()) 打印 8,因此它应该匹配 UInt64,但上面的转换会因 AccessViolationException 而崩溃。我可能可以尝试更安全的方法,例如 Marshal.StructureToPtr,但我仍然想知道我的代码中的错误在哪里?也许是对齐不匹配问题?