Tại sao n ++ nhanh hơn n = n + 1? Và cuối cùng là ta nên dùng gì ?

0
120

**Tại sao n ++ nhanh hơn n = n + 1? Và cuối cùng là ta nên dùng gì ? **> **Các mã được tạo ra là hoàn toàn là để xử lí chung một yêu cầu, tuy nhiên vấn đề ở đây chính là hiệu suất.Vậy tại sao ta nên sử dụng n++ : *** **Tốc độ thực thi sẽ nhanh hơn hoặc bằng so với n = n +1.*** **Kích thước chữ ngắn ==> mã nhị phân nhỏ hơn hoặc bằng n = n+1.*** **Mã nguồn của nó cũng nhỏ gọn hơn .*** **Nhanh hơn n = n + 1 nếu bạn không tối ưu hóa mã của mình.*** **Quá trình nạp, ghi, tải bộ nhớ nhanh hơn.****Tuy nhiên, có một thứ còn nhanh hơn nữa, đó là ++n.Trong một số trường hợp thông thường thì ++n và n++ chả có gì là khác biệt nhau mấy, nhưng xét trong một số trường hợp như **iterator **hoặc **smart pointer vì ** n++ trả về giá trị cũ và giá trị đó phải được lưu lại.Còn ++n thì không. ****Tóm lại, tập thói quen dùng n++ và ++n đôi khi cũng làm tăng hiệu suất trong mã của bạn.****Nguồn: Quora | [**https://www.quora.com/Why-is-n++-faster-than-n-n+1](https://www.quora.com/Why-is-n++-faster-than-n-n+1)#j2team_programming

Người đăng: Hồ Văn Chương vào Chủ nhật, 23 tháng 2, 2020


Các mã được tạo ra là hoàn toàn là để xử lí chung một yêu cầu, tuy nhiên vấn đề ở đây chính là hiệu suất.Vậy tại sao ta nên sử dụng n++ :

  • Tốc độ thực thi sẽ nhanh hơn hoặc bằng so với n = n +1.
  • Kích thước chữ ngắn ==> mã nhị phân nhỏ hơn hoặc bằng n = n+1.
  • Mã nguồn của nó cũng nhỏ gọn hơn .
  • Nhanh hơn n = n + 1 nếu bạn không tối ưu hóa mã của mình.
  • Quá trình nạp, ghi, tải bộ nhớ nhanh hơn.

VÍ DỤ:

Đây là mã C

  • int binary(int i){
  • i = i + 1;
  • return i;
  • }
  •  
  • int unary(int i){
  • i++;
  • return i;
  • }

Trình đang sử dụng:

  • rountree4@cuyahoga ~$ clang version
  • Apple LLVM version 7.0.0 (clang700.1.76)
  • Target: x86_64appledarwin15.6.0
  • Thread model: posix

Nhị phân:

  • _binary: ## @binary
  • .cfi_startproc
  • ## BB#0:
  • pushq %rbp
  • Ltmp0:
  • .cfi_def_cfa_offset 16
  • Ltmp1:
  • .cfi_offset %rbp, 16
  • movq %rsp, %rbp
  • Ltmp2:
  • .cfi_def_cfa_register %rbp
  • ## kill: EDI<def> EDI<kill> RDI<def>
  • leal 1(%rdi), %eax
  • popq %rbp
  • retq
  • .cfi_endproc

unary.

  • _unary: ## @unary
  • .cfi_startproc
  • ## BB#0:
  • pushq %rbp
  • Ltmp3:
  • .cfi_def_cfa_offset 16
  • Ltmp4:
  • .cfi_offset %rbp, 16
  • movq %rsp, %rbp
  • Ltmp5:
  • .cfi_def_cfa_register %rbp
  • ## kill: EDI<def> EDI<kill> RDI<def>
  • leal 1(%rdi), %eax
  • popq %rbp
  • retq
  • .cfi_endproc
Tuy nhiên, có một thứ còn nhanh hơn nữa, đó là ++n.Trong một số trường hợp thông thường thì ++n và n++ chả có gì là khác biệt nhau mấy, nhưng xét trong một số trường hợp như iterator hoặc smart pointer vì n++ trả về giá trị cũ và giá trị đó phải được lưu lại.Còn ++n thì không.
Tóm lại, tập thói quen dùng n++ và ++n đôi khi cũng làm tăng hiệu suất trong mã của bạn.