fork download
  1.  
  2. #include <iostream>
  3. #include <chrono>
  4. #include <vector>
  5. #include <array>
  6.  
  7.  
  8. //Force 1-byte alignment
  9. #pragma pack(push, 1)
  10. struct UnalignedData {
  11. char c;
  12. double d;
  13. int i;
  14. };
  15. #pragma pack(pop)
  16.  
  17.  
  18. //aligned and padded by compiler
  19. struct AlignedData {
  20. double d;
  21. int i;
  22. char c;
  23. };
  24.  
  25.  
  26. void performance_test(){
  27. const int iterations = static_cast<int>(1e4);
  28. std::vector<UnalignedData> unaligned(iterations) ;
  29. std::vector<AlignedData> aligned(iterations);
  30. std::array<double, iterations> collect;
  31.  
  32. //initial
  33. for(int i = 0; i < iterations; ++i){
  34. unaligned[i] = {static_cast<char>(i), i * 3.14, i};
  35. aligned[i] = {i * 3.14, i, static_cast<char>(i)};
  36. }
  37.  
  38. //unaligned
  39. auto start = std::chrono::high_resolution_clock::now();
  40.  
  41. for(int i = 0; i < iterations; ++i){
  42. collect[i] = unaligned[i].d;
  43. }
  44.  
  45. auto end = std::chrono::high_resolution_clock::now();
  46. std::chrono::duration<double, std::milli> unaligned_time(end - start);
  47.  
  48.  
  49. //aligned
  50. start = std::chrono::high_resolution_clock::now();
  51. for(int i = 0; i < iterations; ++i){
  52. collect[i] = aligned[i].d;
  53. }
  54. end = std::chrono::high_resolution_clock::now();
  55. std::chrono::duration<double, std::milli> aligned_time(end - start);
  56.  
  57.  
  58. std::cout << "Exec Time of Unaligned: " << unaligned_time.count() << "ms" << std::endl;
  59. std::cout << "Exec Time of Aligned: " << aligned_time.count() << "ms" << std::endl;
  60. std::cout << "Performance Improvement: " << (unaligned_time.count() / aligned_time.count() -1)*100 << "%" << std::endl;
  61.  
  62.  
  63. }
  64.  
  65.  
  66. int main(){
  67.  
  68. performance_test();
  69. return 0;
  70. }
  71.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Exec Time of Unaligned: 0.000185ms
Exec Time of Aligned: 7.2e-05ms
Performance Improvement: 156.944%