我有两个带字节和布尔数组的结构:
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] values;
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct2
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public bool[] values;
}
Run Code Online (Sandbox Code Playgroud)
以下代码:
class main
{
public static void Main()
{
Console.WriteLine("sizeof array of bytes: "+Marshal.SizeOf(typeof(struct1)));
Console.WriteLine("sizeof array of bools: " + Marshal.SizeOf(typeof(struct2)));
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
sizeof array of bytes: 3
sizeof array of bools: 12
Run Code Online (Sandbox Code Playgroud)
似乎boolean需要4个字节的存储空间.理想情况下boolean ,只需要一点(false或true,0或1 …
我需要分配大小接近50千兆字节的文件,但是这段代码:
RandomAccessFile out = new RandomAccessFile("C:\\hello.txt", "rw");
out.setLength(50 * 1024 * 1024 * 1024); // 50 giga-bytes
Run Code Online (Sandbox Code Playgroud)
抛出异常:
Exception in thread "main" java.io.IOException: ??????? ????????? ????????? ?? ???? ????? ??????? ?????
at java.io.RandomAccessFile.setLength(Native Method)
at Experiment.main(Experiment.java:8)
Run Code Online (Sandbox Code Playgroud)
:尝试在文件开头之前移动文件指针.
当我尝试分配50兆字节这样的异常不会抛出.磁盘的可用空间远大于所需的文件大小.
为什么不需要交换缓冲区或glFinish?
<!DOCTYPE html>
<html>
<head>
<title>Game v.0.0</title>
<script>
var gl = null;
function startGame()
{ { var canvas = document.getElementById('gameCanvas');
var glNames = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
for (var glNameI = 0; glNameI < glNames.length; ++glNameI)
try
{ gl = canvas.getContext(glNames[glNameI]);
if (gl) break;
}
catch(e)
{}
if(!gl)
{ canvas.outerHTML = "<a>WebGL NOT SUPPORTED? :(</a>";
return;
}
}
window.onkeydown = function(ev)
{ switch(ev.keyCode)
{
case 49:// 1 key
gl.clearColor(0.3,0.7,0.2,1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
break;
case 50:// 2 key
gl.clearColor(0.3,0.2,0.7,1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
break;
}
}; …Run Code Online (Sandbox Code Playgroud)