Skip to content

Instantly share code, notes, and snippets.

@megasuperlexa
Created May 16, 2023 06:20
Show Gist options
  • Save megasuperlexa/c50f665c852dad0d82e839ef6b45a355 to your computer and use it in GitHub Desktop.
Save megasuperlexa/c50f665c852dad0d82e839ef6b45a355 to your computer and use it in GitHub Desktop.
/*
SharpLab tools in Run mode:
• value.Inspect()
• Inspect.Heap(object)
• Inspect.Stack(value)
• Inspect.MemoryGraph(value1, value2, …)
*/
using System;
using System.Runtime.InteropServices;
class Program{
public static void Main()
{
WorkWithSpans();
}
public static void WorkWithSpans()
{
// Create a span over an array.
var array = new byte[100];
var arraySpan = new Span<byte>(array);
InitializeSpan(arraySpan);
Console.WriteLine($"The sum is {ComputeSum(arraySpan):N0}");
Inspect.Heap(array);
// Create an array from native memory.
var native = Marshal.AllocHGlobal(100);
Span<byte> nativeSpan;
unsafe
{
nativeSpan = new Span<byte>(native.ToPointer(), 100);
}
InitializeSpan(nativeSpan);
Console.WriteLine($"The sum is {ComputeSum(nativeSpan):N0}");
Marshal.FreeHGlobal(native);
// Create a span on the stack.
Span<byte> stackSpan = stackalloc byte[100];
InitializeSpan(stackSpan);
Console.WriteLine($"The sum is {ComputeSum(stackSpan):N0}");
}
public static void InitializeSpan(Span<byte> span)
{
byte value = 0;
for (int ctr = 0; ctr < span.Length; ctr++)
span[ctr] = value++;
}
public static int ComputeSum(Span<byte> span)
{
int sum = 0;
foreach (var value in span)
sum += value;
return sum;
}
}
// The example displays the following output:
// The sum is 4,950
// The sum is 4,950
// The sum is 4,950
The sum is 4,950
{
"type": "inspection:memory",
"title": "System.Byte[] at 0x2765CE7D068",
"labels": [
{
"name": "header",
"offset": 0,
"length": 8
},
{
"name": "type handle",
"offset": 8,
"length": 8
},
{
"name": "length",
"offset": 16,
"length": 8
},
{
"name": "0",
"offset": 24,
"length": 1
},
{
"name": "1",
"offset": 25,
"length": 1
},
{
"name": "2",
"offset": 26,
"length": 1
},
{
"name": "3",
"offset": 27,
"length": 1
},
{
"name": "4",
"offset": 28,
"length": 1
},
{
"name": "5",
"offset": 29,
"length": 1
},
{
"name": "6",
"offset": 30,
"length": 1
},
{
"name": "7",
"offset": 31,
"length": 1
},
{
"name": "8",
"offset": 32,
"length": 1
},
{
"name": "9",
"offset": 33,
"length": 1
},
{
"name": "10",
"offset": 34,
"length": 1
},
{
"name": "11",
"offset": 35,
"length": 1
},
{
"name": "12",
"offset": 36,
"length": 1
},
{
"name": "13",
"offset": 37,
"length": 1
},
{
"name": "14",
"offset": 38,
"length": 1
},
{
"name": "15",
"offset": 39,
"length": 1
},
{
"name": "16",
"offset": 40,
"length": 1
},
{
"name": "17",
"offset": 41,
"length": 1
},
{
"name": "18",
"offset": 42,
"length": 1
},
{
"name": "19",
"offset": 43,
"length": 1
},
{
"name": "20",
"offset": 44,
"length": 1
},
{
"name": "21",
"offset": 45,
"length": 1
},
{
"name": "22",
"offset": 46,
"length": 1
},
{
"name": "23",
"offset": 47,
"length": 1
},
{
"name": "24",
"offset": 48,
"length": 1
},
{
"name": "25",
"offset": 49,
"length": 1
},
{
"name": "26",
"offset": 50,
"length": 1
},
{
"name": "27",
"offset": 51,
"length": 1
},
{
"name": "28",
"offset": 52,
"length": 1
},
{
"name": "29",
"offset": 53,
"length": 1
},
{
"name": "30",
"offset": 54,
"length": 1
},
{
"name": "31",
"offset": 55,
"length": 1
},
{
"name": "32",
"offset": 56,
"length": 1
},
{
"name": "33",
"offset": 57,
"length": 1
},
{
"name": "34",
"offset": 58,
"length": 1
},
{
"name": "35",
"offset": 59,
"length": 1
},
{
"name": "36",
"offset": 60,
"length": 1
},
{
"name": "37",
"offset": 61,
"length": 1
},
{
"name": "38",
"offset": 62,
"length": 1
},
{
"name": "39",
"offset": 63,
"length": 1
},
{
"name": "40",
"offset": 64,
"length": 1
},
{
"name": "41",
"offset": 65,
"length": 1
},
{
"name": "42",
"offset": 66,
"length": 1
},
{
"name": "43",
"offset": 67,
"length": 1
},
{
"name": "44",
"offset": 68,
"length": 1
},
{
"name": "45",
"offset": 69,
"length": 1
},
{
"name": "46",
"offset": 70,
"length": 1
},
{
"name": "47",
"offset": 71,
"length": 1
},
{
"name": "48",
"offset": 72,
"length": 1
},
{
"name": "49",
"offset": 73,
"length": 1
},
{
"name": "50",
"offset": 74,
"length": 1
},
{
"name": "51",
"offset": 75,
"length": 1
},
{
"name": "52",
"offset": 76,
"length": 1
},
{
"name": "53",
"offset": 77,
"length": 1
},
{
"name": "54",
"offset": 78,
"length": 1
},
{
"name": "55",
"offset": 79,
"length": 1
},
{
"name": "56",
"offset": 80,
"length": 1
},
{
"name": "57",
"offset": 81,
"length": 1
},
{
"name": "58",
"offset": 82,
"length": 1
},
{
"name": "59",
"offset": 83,
"length": 1
},
{
"name": "60",
"offset": 84,
"length": 1
},
{
"name": "61",
"offset": 85,
"length": 1
},
{
"name": "62",
"offset": 86,
"length": 1
},
{
"name": "63",
"offset": 87,
"length": 1
},
{
"name": "64",
"offset": 88,
"length": 1
},
{
"name": "65",
"offset": 89,
"length": 1
},
{
"name": "66",
"offset": 90,
"length": 1
},
{
"name": "67",
"offset": 91,
"length": 1
},
{
"name": "68",
"offset": 92,
"length": 1
},
{
"name": "69",
"offset": 93,
"length": 1
},
{
"name": "70",
"offset": 94,
"length": 1
},
{
"name": "71",
"offset": 95,
"length": 1
},
{
"name": "72",
"offset": 96,
"length": 1
},
{
"name": "73",
"offset": 97,
"length": 1
},
{
"name": "74",
"offset": 98,
"length": 1
},
{
"name": "75",
"offset": 99,
"length": 1
},
{
"name": "76",
"offset": 100,
"length": 1
},
{
"name": "77",
"offset": 101,
"length": 1
},
{
"name": "78",
"offset": 102,
"length": 1
},
{
"name": "79",
"offset": 103,
"length": 1
},
{
"name": "80",
"offset": 104,
"length": 1
},
{
"name": "81",
"offset": 105,
"length": 1
},
{
"name": "82",
"offset": 106,
"length": 1
},
{
"name": "83",
"offset": 107,
"length": 1
},
{
"name": "84",
"offset": 108,
"length": 1
},
{
"name": "85",
"offset": 109,
"length": 1
},
{
"name": "86",
"offset": 110,
"length": 1
},
{
"name": "87",
"offset": 111,
"length": 1
},
{
"name": "88",
"offset": 112,
"length": 1
},
{
"name": "89",
"offset": 113,
"length": 1
},
{
"name": "90",
"offset": 114,
"length": 1
},
{
"name": "91",
"offset": 115,
"length": 1
},
{
"name": "92",
"offset": 116,
"length": 1
},
{
"name": "93",
"offset": 117,
"length": 1
},
{
"name": "94",
"offset": 118,
"length": 1
},
{
"name": "95",
"offset": 119,
"length": 1
},
{
"name": "96",
"offset": 120,
"length": 1
},
{
"name": "97",
"offset": 121,
"length": 1
},
{
"name": "98",
"offset": 122,
"length": 1
},
{
"name": "99",
"offset": 123,
"length": 1
}
],
"data": [
0,
0,
0,
0,
0,
0,
0,
0,
176,
141,
192,
180,
249,
127,
0,
0,
100,
0,
0,
0,
0,
0,
0,
0,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99
]
}
The sum is 4,950
The sum is 4,950
{
"version": 1,
"target": "Run",
"mode": "Debug"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment