在本文中,您将会了解到关于Java中是否存在“指针”或“不安全代码”的概念?的新资讯,同时我们还将为您解释java中到底有没有指针的相关在本文中,我们将带你探索Java中是否存在“指针”或“不安全代码
在本文中,您将会了解到关于Java中是否存在“指针”或“不安全代码”的概念?的新资讯,同时我们还将为您解释java中到底有没有指针的相关在本文中,我们将带你探索Java中是否存在“指针”或“不安全代码”的概念?的奥秘,分析java中到底有没有指针的特点,并给出一些关于c – Concepts TS中是否有任何预定义的概念?、c – MacOS中是否存在“struct timeval”的nanosleep函数?、c – 将“指针指针”传递给模板函数、C#不安全代码固定指针作为参数传递的实用技巧。
本文目录一览:- Java中是否存在“指针”或“不安全代码”的概念?(java中到底有没有指针)
- c – Concepts TS中是否有任何预定义的概念?
- c – MacOS中是否存在“struct timeval”的nanosleep函数?
- c – 将“指针指针”传递给模板函数
- C#不安全代码固定指针作为参数传递
Java中是否存在“指针”或“不安全代码”的概念?(java中到底有没有指针)
昨天我参加了一家知名欧洲公司的CTO的演讲,他直到最近才告诉他他不知道Java有指针。在面对他时,他说他对Java中存在指针/不安全代码绝对有把握。
答案1
小编典典有一个叫做的类sun.misc.Unsafe
,这是真的。但是它没有在Java代码中使用指针(因为Java没有指针,尽管我同意Java引用在概念上是相似的),所以大多数都是使用本机代码实现的。
正如我在评论中提到的那样,这不是公共API的一部分,不应由客户端代码使用。但是,您可以在工作中看到它时,你看的来源Atomic*
在课堂上的java.util.concurrent.atomic
包。
c – Concepts TS中是否有任何预定义的概念?
我在哪里寻找这样的预定义概念?
the list at cppreference.com是一个精确而详尽的清单吗?
我可以将它们与最新的GCC主干版本一起使用吗?
编辑1:由于概念未被C 17接受,因此将C 17更改为TS.
解决方法
它既不是疏忽也不是错误……目标是在TS中提供纯语言扩展,允许开发人员在提交标识库所需概念(大量时间)之前尝试新功能.
Ranges TS将定义标准库所需的概念.
海湾合作委员会可能附带一些概念,但我没有听说过任何具体的计划.我有一个库,它定义了Ranges TS中出现的许多概念(但不是全部):https://github.com/asutton/origin,但我仍在研究可用的版本和相应的文档.它只能从主干编译GCC.我希望下周有足够的文件.
c – MacOS中是否存在“struct timeval”的nanosleep函数?
显然,基本思想是将时间记录两次并进行减法.当我发现“sys / time.h”中的gettimeofday()和这个函数的结构 – struct timeval时,问题就发生了.然后我得到了时间间隔,并希望根据时间间隔让它睡眠.但是,似乎nanosleep()或usleep()没有timeval类型的参数(忽略sleep()因为我至少需要毫秒).
我应该将timeval转换为适合nanosleep()或usleep(),还是有更好更简单的方法?
解决方法
#include <stdio.h> #include <unistd.h> #include <sys/time.h> #include <sys/select.h> int main(void) { printf("start...\n"); struct timeval tv = {10,0}; select(0,NULL,&tv); printf("done!\n"); return 0; }
c – 将“指针指针”传递给模板函数
void initializeImageBuffer(unsigned char **image,int w,int h) { if (*image != NULL) delete[] *image; *image = new unsigned char[w * h]; }
现在我想使用函数模板推广参数类型(unsigned char / int / double).多数民众赞成我所做的:
template<typename T,int,int> void initializeImageBuffer(T **image,int h) { if (*image != NULL) delete[] *image; *image = new T[w * h]; }
但使用以下功能时出错:
unsigned char* image; initializeImageBuffer(&image,200,200);
“这些参数类型没有重载函数的实例.参数类型是(unsigned char **,int).”
解决方法
template<typename T,int>
在这里,您声明您的模板有三个参数,类型T和两个未命名的int.由于无法在调用站点推断出int的值,因此您需要明确地提供它们以及T,因为您只能从左到右提供模板参数:
initializeImageBuffer<unsigned char,42,42>(&image,200);
但是,你最想要的只是放弃这些内容,它们在这里绝对没用.
template<typename T> void initializeImageBuffer(T **image,int h)
C#不安全代码固定指针作为参数传递
unsafe static void SquarePtrParam (int* p) { *p *= *p; } unsafe static void Main() { Point pt = new Point(); pt.x = 5; pt.y = 6; // Pin pt in place: fixed (int* p = &pt.x) { SquarePtrParam (p); } // pt Now unpinned. Console.WriteLine ("{0} {1}",pt.x,pt.y); }
我只是想知道,我们是直接访问SquarePtrParam函数中的指针,它是否继承了从调用方法修复数组的信息?
为什么我们不需要在SquarePtrParam中将其明确设置为本地修复.
我想我可以使用一些关于这个固定语句的详细说明.
解决方法
在IL代码中,它将创建虚拟PINNED局部变量并将指针存储到其中.这将不允许GC移动内存区域包含此指针.在您离开固定块后,它将零存储到此PINNED变量中.像这样:
public static unsafe void TestInternal(byte* pointer) { Console.WriteLine((IntPtr)pointer); } public static void FixedDemo() { Byte[] newArray = new Byte[1024]; unsafe { fixed (Byte* pointer = &newArray[0]) { TestInternal(pointer); } } Console.WriteLine("Test Complete"); }
所以IL Code中的FixedDemo:
.method public hidebysig static void FixedDemo() cil managed { // Code size 47 (0x2f) .maxstack 2 .locals init ([0] uint8[] newArray,[1] uint8& pinned pointer) IL_0000: nop IL_0001: ldc.i4 0x400 // Put 1024 on the stack IL_0006: newarr [mscorlib]System.Byte // allocate new array of 1024 length IL_000b: stloc.0 // Store it in local variable 0 IL_000c: nop IL_000d: ldloc.0 // Put local variable 0 on the stack IL_000e: ldc.i4.0 // Put zero on the stack IL_000f: ldelema [mscorlib]System.Byte // Load address of zero index from array IL_0014: stloc.1 // !!! Here we pin memory by storing it in pinned variable IL_0015: nop IL_0016: ldloc.1 // Load function argument IL_0017: conv.i // Perform conversion IL_0018: call void FinMath.Tests.Program::TestInternal(uint8*) IL_001d: nop IL_001e: nop IL_001f: ldc.i4.0 // Load zero on the stack IL_0020: conv.u // Perform conversion IL_0021: stloc.1 // !!!! Here we unpin memory IL_0022: nop IL_0023: ldstr "Test Complete" // Load string IL_0028: call void [mscorlib]System.Console::WriteLine(string) // Out message IL_002d: nop IL_002e: ret } // end of method Program::FixedDemo
欲了解更多信息,请访
> MSDN
> MSDN Magazine: Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework
> Common language Runtime standard ECMA 335分区III,1.1.4.2管理指针(类型&)
关于Java中是否存在“指针”或“不安全代码”的概念?和java中到底有没有指针的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c – Concepts TS中是否有任何预定义的概念?、c – MacOS中是否存在“struct timeval”的nanosleep函数?、c – 将“指针指针”传递给模板函数、C#不安全代码固定指针作为参数传递的相关知识,请在本站寻找。
本文标签: