高质量C++编程点滴(二)

高质量C++编程点滴(二)

 

使用合理的内存访问方式

 

一、你需要开辟一段内存来存放和管理一个4 x 4的矩阵,并单位化之。

不合理:

int aMatrix[4][4];

for ( int i = 0; i < 4; i++ )

{

       for ( int j = 0; j < 4; j++ )

       {

              if ( i == j )

              {

                     aMatrix[i][j] = 1;

              }

              else

              {

                     aMatrix [i][j] = 0;

              }

       }

}

合理:

int aMatrix[4 * 4];

for ( int i = 0; i < 4; i++ )

{

       for ( int j = 0; j < 4; j++ )

       {

              if ( i == j )

              {

                     aMatrix[ i * 4 + j ] = 1;

              }

              else

              {

                     aMatrix [ i * 4 + j ] = 0;

              }

       }

}

解析:

在任何时候都要避免使用多维数组,数组维数的增加,相应的程序复杂度将会以几何级数的方式增加,也更加的难于理解。

 

 

 

二、你需要对上面那个矩阵赋值,使它从左上角向右下角按先纵后横的顺序给它赋值

不合理:

for( int i = 0; i < 4; i++ )

{

       for ( int j = 0; j < 4; j++ )

       {

              aMatrix[ j * 4 + i ] = i * 4 + j;

       }

}

合理:

for( int i = 0; i < 4; i++ )

{

       for ( int j = 0; j < 4; j++ )

       {

              aMatrix[i * 4 + j ] = j * 4 + i;

       }

}

解析:

尽量保证顺序的访问数组的每一个元素。由于Windows内存的管理模式,内存是分页管理的。顺序访问数组可以基本保证页面不会来回切换,从而减少了页失效的数量,提高了程序的整体性能。这种性能的提升对于大的数组尤为明显。

 

 

 

三、你需要用3float值来表示一个三维的点,并要写一个函数对一个三维点的数组进行计算赋值。

不合理:

void foo( float *pPoints[3] )

{

       float aPoint[3] = { 1.0f, 2.0f, 3.0f };

       int nCount = (int)_msize( pPoints );

       for ( int i = 0; i < nCount; i++ )

       {

              pPoints[i][0] = aPoint[0];

              pPoints[i][1] = aPoint[1];

              pPoints[i][2] = aPoint[2];

       }

}

合理:

struct POINT3

{

       float x, y, z;

};

 

void foo( POINT3 *pPoints, int nCount )

{

       POINT3 Pt = { 1.0f, 2.0f, 3.0f };

       for ( int i = 0; i < nCount; i++ )

       {

              pPoints[i] = Pt;

       }

}

解析:

有两点,一,不要使用_msize对数组的大小进行测定,_msize只能对使用malloccalloc申请的内存进行大小测定,对于其它的如new或一些API,将会导致程序的崩溃。在设计此类需要传入数组的函数时,别忘了把数组的元素数量也做为参数一并传入,哪怕它是固定的,这将是一个良好的习惯。二,对于float[3]这种类型,尽量避免直接使用它,最好的办法就是用struct对其进行简单的封装,在复制的时候直接使用“=”就可以进行准确的按位赋值了。

 

 

 

四、你有一个函数的定义,在这个函数中会new一个比较大的对象Data,并在计算后将它删除。但这个函数将被频繁调用。

不合理:

void foo( void )

{

       Data *p = new Data;

       CalcData( p );

       delete p;

}

合理:

char Buf[sizeof(DATA)];

void foo( void )

{

       Data *p = new(Buf) Data;

       CalcData( p );

}

解析:

new(buf) type;是定位的new语法,它不会真正的分配内存,而是简单的在指定的已分配的内存起点上划分出一段与类型大小匹配的空间,并直接在这段内存上对该类型进行构造对象,并返回对象的指针。由于它没有真正的分配内存空间,因此它的效率是非常高的,在类似于上述例程中,频繁申请和释放一个大对象的操作,定位的new可以带来很大的效率提升。

(连载)

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: C/C++作为一种高效的编程语言,早已成为计算机科学领域中不可缺少的工具。而高质量的C/C++编程,更是关系到程序的性能、稳定性和可维护性等诸多方面。如何进行高质量C/C++编程,对于每一位程序员来说都是一个必须面对的问题。 首先,代码的可读性是高质量C/C++编程的一项重要因素。好的代码应该是简洁的、易于理解的、有规范的命名方式、注释清晰的。在编写时,要注意代码的排版、格式和缩进,这样不仅有利于他人的查看,也方便自己或其他维护者对代码进行修改和维护。 其次,C/C++编程需要严格遵循编程规范和标准,如C语言的ANSI C标准、C++语言的ISO/IEC 14882标准等。规范的编码风格可以减少代码中的错误和漏洞,增强程序的健壮性和安全性。 另外,程序员需要充分运用现代的开发工具和技术,如IDE、调试器、GCC等,以提高代码的质量和效率。在开发时,要进行测试和调试,及时发现和解决问题,确保程序的正确性。 高质量C/C++编程还需要具备良好的代码管理和协作能力,可通过版本控制工具和团队协作平台等帮助程序员有效地管理和协调团队开发。同时,要不断学习和研究最新的开发技术和工具,以保持自身在编程领域的竞争力。 综上所述,高质量C/C++编程需要程序员具备良好的编码规范和技术水平,以及良好的代码管理和协作能力。只有不断提高自己的专业能力,才能开发出高效、稳定、可维护的优质程序。 ### 回答2: C/C++编程语言自诞生以来,一直被广泛应用于各种系统级和底层编程领域。随着计算机技术的不断发展和应用的不断扩大,C/C++编程已经成为了计算机编程的基础语言之一。 高质量的C/C++编程可以提高程序的效率、可靠性和可维护性。因此,学习和掌握C/C++编程技术,对于计算机科学和软件工程人员来说,是非常重要的一项技能。在学习C/C++编程技术时,需要注重实践,要经常进行编程练习,从而提高自己的编程水平和技巧。 同时,在进行C/C++编程时需要关注以下几个方面: 1. 语言基础。掌握C/C++语言的基础知识是进行高质量编程的基础。包括数据类型、运算符、流控制、函数等等。 2. 编码规范。编码规范是保证代码质量和可维护性的重要环节。遵循良好的编码规范可以使得代码更容易被理解、修改和扩展,降低程序出错的概率。 3. 算法和数据结构。算法和数据结构是C/C++开发中非常重要的一个方面,掌握好算法和数据结构可以帮助我们更好地理解问题、分析问题、解决问题。 4. 调试技术。调试是在C/C++编程中非常重要的一个环节,良好的调试技术可以帮助我们快速发现和解决问题,提高程序的效率和可靠性。 总之,高质量C/C++编程需要我们掌握好语言基础,遵循良好的编码规范,熟练掌握算法和数据结构,同时具备良好的调试技术和开发习惯。只有不断地学习和实践,才能够成为一名优秀的C/C++程序员。 ### 回答3: 高质量C/C++编程下载是指可以轻松下载到高质量C/C++编程内容的资源。在学习和使用C/C++编程语言时,对于学习者和开发者来说,能够获得高质量编程资源是非常重要的。 高质量C/C++编程下载的资源可以包括各种编码指南、最佳实践、样例代码、实用工具、编译器等开发工具和读物。通过下载这些资源,可以加快程序员的学习速度,提升代码的质量,提高代码效率,以及提升代码的可维护性和可读性。 对于初学者而言,高质量C/C++编程下载资源可以作为学习路上的重要指南,帮助他们建立起正确的编程思路和技能。对于有经验的开发者来说,这些资源可以提供新的思路和技术,使得他们的工作更加高效和创新。 总的来看,高质量C/C++编程下载资源对于学习者和开发者来说都是非常宝贵的资源,值得花费时间和精力去探索和学习。无论是初学编程技能还是进一步提升自己的专业水平,这些资源都能够带来巨大的帮助和收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fireseed

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值