C#编程(七十六)----------使用指针实现基于栈的高性能数组
2017-03-29 11:37
148 查看
使用指针实现基于栈的高性能数组
以一个案例为主来分析实现方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 基于堆栈的数组
{
class Program
{
static void Main(string[] args)
{
int[] i = new int[10];
Console.WriteLine(i[1]);
/*使用指针优化性能
使用关键字stackalloc创建基于堆栈的高效数组
*/
unsafe
{
/*
* stackalloc命令只分配堆栈内存而已,不会把内存初始化为任何默认值
* 1.其后紧跟要存储数据类型名(该数据类型必须是值类型)
* 2.分配的字节数为变量个数*sizeof(数据类型)
*/
int* pInt = stackalloc int[10];
*pInt = 0;
*(pInt + 1) = 1;
pInt[2] = 5; //表达式被编译为*(pInt+2)
pInt[50] = 100; //不会报错,使用stackalloc声明相同数组,对数组边界检查,该数组黑没有封装任何对象
Console.WriteLine(*(pInt+1));
Console.WriteLine(pInt[2]);
Console.WriteLine(*(pInt+3));
Console.WriteLine(pInt[50]);
Console.ReadKey();
}
}
}
}
以一个案例为主来分析实现方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 基于堆栈的数组
{
class Program
{
static void Main(string[] args)
{
int[] i = new int[10];
Console.WriteLine(i[1]);
/*使用指针优化性能
使用关键字stackalloc创建基于堆栈的高效数组
*/
unsafe
{
/*
* stackalloc命令只分配堆栈内存而已,不会把内存初始化为任何默认值
* 1.其后紧跟要存储数据类型名(该数据类型必须是值类型)
* 2.分配的字节数为变量个数*sizeof(数据类型)
*/
int* pInt = stackalloc int[10];
*pInt = 0;
*(pInt + 1) = 1;
pInt[2] = 5; //表达式被编译为*(pInt+2)
pInt[50] = 100; //不会报错,使用stackalloc声明相同数组,对数组边界检查,该数组黑没有封装任何对象
Console.WriteLine(*(pInt+1));
Console.WriteLine(pInt[2]);
Console.WriteLine(*(pInt+3));
Console.WriteLine(pInt[50]);
Console.ReadKey();
}
}
}
}
相关文章推荐
- C#高级编程七十六天----使用指针实现基于栈的高性能数组
- 基于数据成员是指向一个数组的指针来实现的list
- 使用函数和指针实现数组的逆序输出
- Python 使用由单链表构建的数组实现有边际优先队列 (基于class, 包含迭代器)
- 一.数组和指针的差别二.函数的好处以及使用函数的注意项。三.用c语言如何实现面向对象?c语言哪些点体现了面向对象。
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- C语言中使用指针实现数组排序
- linux下使用vim实现基于静态数组的顺序表的一些基本操作
- 使用指针的方式实现数组逆序
- Python 使用循环数组实现队列 (基于class, 包含迭代器)
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- 实现冒泡排序。(排序整形数组)。使用数组和指针两种方法。
- 《面向对象程序设计与VC++实现》--Liwei_1_3 (交换 使用引用、指针、变量三种方法)
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数
- 在BCB中使用向量实现控件数组
- 使用INDY TCP组件实现基于协议采用XML方式的文件传输
- 基于数组或链表的堆栈实现
- 使用Spring 2.0 新特性实现声明式事务管理-基于Annotation