标签: unsafe

为什么sun.misc.Unsafe存在,它如何在现实世界中使用?

前几天我遇到了sun.misc.Unsafe包裹,并对它能做什么感到惊讶.

当然,这门课没有证件,但我想知道是否有充分的理由使用它.您可能需要使用哪些场景?它如何在现实场景中使用?

此外,如果您确实需要它,那是否表明您的设计可能出现问题?

为什么Java甚至包括这个类?

java unsafe

267
推荐指数
12
解决办法
6万
查看次数

为什么我会收到错误"只有在使用/ unsafe进行编译时才会出现不安全的代码"?

为什么我会收到以下错误?

只有在使用/ unsafe进行编译时才会出现不安全的代码?

我在C#和Visual Studio 2008中工作,在Windows CE上进行编程.

c# unsafe windows-ce visual-studio-2008

131
推荐指数
2
解决办法
13万
查看次数

如何在Java中使用指针?

我知道Java没有指针,但我听说Java程序可以用指针创建,这可以由少数java专家完成.这是真的吗?

java pointers unsafe

102
推荐指数
7
解决办法
33万
查看次数

什么时候在C#/ .NET中使用指针?

我知道C#为程序员提供了访问的能力,在不安全的上下文中使用指针.但什么时候需要呢?

在什么情况下,使用指针变得不可避免?

是出于性能原因吗?

另外,为什么C#会通过不安全的上下文公开此功能,并从中删除所有托管优势?从理论上讲,是否可以使用指针而不会失去托管环境的任何优势?

.net c# performance pointers unsafe

70
推荐指数
3
解决办法
2万
查看次数

在循环内部或外部使用不安全是否有任何区别?

我过去从不需要使用不安全的东西,但是现在我需要它来处理一个操纵位图的指针.

我找不到任何其他方面的文档,但我想更好地理解不安全是如何工作的,如果在循环内部或外部使用它会有什么不同.

做得更好:

unsafe
{
    for (int x = 0; x < maxX; x++)
    {
        for (int y = 0; y < maxY; y++)
        {           
            //Unsafe pointer operations here.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

还是做?:

for (int x = 0; x < maxX; x++)
{
    for (int y = 0; y < maxY; y++)
    {   
        unsafe
        {       
            //Unsafe pointer operations here.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# unsafe

65
推荐指数
2
解决办法
2131
查看次数

sun.misc.Unsafe记录在哪里?

有谁知道全面的文档sun.misc.Unsafe

是我能找到的全部.有谁知道更好的来源?

寻找Javadoc Unsafe.putOrderedInt()只找到

在此输入图像描述

java unsafe java-api

63
推荐指数
2
解决办法
3万
查看次数

C#性能 - 使用不安全的指针而不是IntPtr和Marshal

我正在将C应用程序移植到C#中.C应用程序从第三方DLL调用许多函数,所以我在C#中为这些函数编写了P/Invoke包装器.其中的一些C函数分配,我有在C#应用程序使用的数据,所以就用IntPtr的,Marshal.PtrToStructure并且Marshal.Copy到本机数据(数组和结构)复制到管理变量.

不幸的是,C#app被证明比C版慢得多.快速的性能分析表明,上述基于编组的数据复制是瓶颈.我正在考虑通过重写它以使用指针来加速C#代码.由于我没有C#中不安全的代码和指针的经验,我需要有关以下问题的专家意见:

  1. 使用unsafe代码和指针而不是IntPtrMarshaling有什么缺点?例如,它是否以任何方式更不安全(双关语)?人们似乎更喜欢编组,但我不知道为什么.
  2. 使用P/Invoking指针真的比使用编组快吗?大约可以预期多少加速?我找不到任何基准测试.

示例代码

为了使情况更加清晰,我将一个小的示例代码(实际代码复杂得多)整合在一起.我希望这个例子说明我在谈论"不安全的代码和指针"与"IntPtr和Marshal"时的意思.

C库(DLL)

MyLib.h

#ifndef _MY_LIB_H_
#define _MY_LIB_H_

struct MyData 
{
  int length;
  unsigned char* bytes;
};

__declspec(dllexport) void CreateMyData(struct MyData** myData, int length);
__declspec(dllexport) void DestroyMyData(struct MyData* myData);

#endif // _MY_LIB_H_
Run Code Online (Sandbox Code Playgroud)

MyLib.c

#include <stdlib.h>
#include "MyLib.h"

void CreateMyData(struct MyData** myData, int length)
{
  int i;

  *myData = (struct MyData*)malloc(sizeof(struct MyData));
  if (*myData != NULL)
  {
    (*myData)->length = length; …
Run Code Online (Sandbox Code Playgroud)

c c# pinvoke unsafe marshalling

52
推荐指数
4
解决办法
3万
查看次数

Java 8 Unsafe:xxxFence()指令

在Java 8中,三个内存屏障指令被添加到Unsafe类():

/**
 * Ensures lack of reordering of loads before the fence
 * with loads or stores after the fence.
 */
void loadFence();

/**
 * Ensures lack of reordering of stores before the fence
 * with loads or stores after the fence.
 */
void storeFence();

/**
 * Ensures lack of reordering of loads or stores before the fence
 * with loads or stores after the fence.
 */
void fullFence();
Run Code Online (Sandbox Code Playgroud)

如果我们用以下方式定义内存屏障(我认为或多或少容易理解):

考虑X和Y是要重新排序的操作类型/类,

X_YFence() 是一个内存屏障指令,它确保在屏障启动之后,在屏障完成任何操作之前,屏障之前的所有类型X操作都已完成.

我们现在可以将障碍名称"映射" Unsafe …

java concurrency unsafe memory-fences java-8

45
推荐指数
3
解决办法
5720
查看次数

C#'unsafe'函数 - *(float*)(&result)vs.(float)(result)

任何人都可以用简单的方式解释下面的代码:

public unsafe static float sample(){    
      int result = 154 + (153 << 8) + (25 << 16) + (64 << 24);

      return *(float*)(&result); //don't know what for... please explain
}
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码使用不安全的功能

对于上面的代码,我很难过,因为我不明白它的返回值与下面的返回值之间的区别是什么:

return (float)(result);
Run Code Online (Sandbox Code Playgroud)

如果你回来了,是否有必要使用不安全的功能*(float*)(&result)

c# unsafe type-punning

44
推荐指数
2
解决办法
2756
查看次数

错误lnk2026:模块对safeseh映像不安全

构建示例可视化C++项目时出现此错误.首先我下载了​​3个样本项目,都解决了同样的问题,打印出所有小于N的素数(你可能知道这些样本项目吗?).我没有任何问题地构建了纯C项目.但是当我尝试构建基于程序集的项目时,我收到了这个错误.

谢谢.

unsafe visual-c++

44
推荐指数
3
解决办法
7万
查看次数