编程语言
首页 > 编程语言> > C/C++ 的注意事项和 Rust 的兴起

C/C++ 的注意事项和 Rust 的兴起

作者:互联网

C/C++ 的应用知识。

让我们首先了解为什么 Rust 在 C/C++ 的世界中对性能关键型应用程序和系统软件开发有意义。

随着时间的推移,我将指出我作为 C/C++ 程序员面临的一些注意事项。

不检查数组索引的 边界导致缓冲区溢出。

# include  <stdio.h>
 # include  <stdlib.h>
 # include  <string.h>
 int  check_authentication ( char *password) { 
int auth_flag = 0 ; 
char password_buffer[ 16 ]; 
strcpy (password_buffer, 密码); 
if ( strcmp (password_buffer, "brillig" ) == 0 ) 
  auth_flag = 1 ; 
if ( strcmp (password_buffer, "outgrabe" ) == 0 )
  auth_flag = 1 ; 
  返回auth_flag;
} 
int  main ( int argc, char *argv[]) { 
  if (argc < 2 ) { 
    printf ( "Usage: %s <password>\n" , argv[ 0 ]); 
    退出0);
  } 
  if (check_authentication(argv[ 1 ])) { 
    printf ( "\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n" ); 
    printf ( " 访问被授予。\n" ); 
    printf ( "-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); 
  } else { 
    printf ( "\n访问被拒绝。\n" ); 
  } 
} 
//代码来源:黑客:剥削的艺术,第 2 版

很容易产生严重的运行时错误,这些错误会使程序停止,例如“分段错误”——。

  

内存泄漏

由于 C/C++ 程序没有自动释放动态分配内存的内存管理例程,程序员需要通过手动释放内存来确保它已被释放。我们是程序员,我们确实会忘记释放内存,或者有时我们不了解应用程序的逻辑,不可避免地会将内存留在内存池中,而这些内存是程序无法访问的。这种情况称为内存泄漏。当它是一个需要像 Web 服务器一样全天候 24/7 运行的高可用性守护程序时,情况会变得更糟。

  

数据竞赛

很多时候在编写并发模块时,我们最终会由于数据竞争而导致结果不一致。~~C++ 标准还定义了术语数据竞争,表示由于对单个对象的并发修改而出现的特定类型的竞争条件。~~ C++ 并发实战

标签:c++,应用意识,rust,系统软件,开发,程序,服务器
来源: