Make 73 numeric constants const, moving them into .rdata (#234)

This change makes the 73 variables in ratconst.h actually
inline const, which allows them to move from the mutable .data
section of the executable, and into the read-only .rdata
section instead.

Moving data to the .rdata section has a number of benefits,
such as preventing possible corruption due to stray writes,
or other memory corruption.

Additionally, the initialization at run-time start-up is no
longer needed, so there is also a reduction in the .text
(code) section as well.

As a result the overall size of the Calculator.exe binary
(on x64 Release builds) decreases by 1,536 bytes (or ~1.5 KB)
with no change in behavior other than a small performance benefit.
This commit is contained in:
Jeff Genovy 2019-03-13 13:10:14 -07:00 committed by Daniel Belcher
parent 7663c0d5f2
commit 251578047f
4 changed files with 119 additions and 117 deletions

View File

@ -61,7 +61,7 @@ void* zmalloc(size_t a)
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src) void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src)
{ {
memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE)))); memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE))));
} }

View File

@ -1,480 +1,482 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
// Autogenerated by _dumprawrat in support.c #pragma once
NUMBER init_num_one= {
// Autogenerated by _dumprawrat in support.cpp
inline const NUMBER init_num_one= {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_two= { inline const NUMBER init_num_two= {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_five= { inline const NUMBER init_num_five= {
1, 1,
1, 1,
0, 0,
{ 5,} { 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_six= { inline const NUMBER init_num_six= {
1, 1,
1, 1,
0, 0,
{ 6,} { 6,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_ten= { inline const NUMBER init_num_ten= {
1, 1,
1, 1,
0, 0,
{ 10,} { 10,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_smallest = { inline const NUMBER init_p_rat_smallest = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_smallest = { inline const NUMBER init_q_rat_smallest = {
1, 1,
4, 4,
0, 0,
{ 0, 190439170, 901055854, 10097,} { 0, 190439170, 901055854, 10097,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_negsmallest = { inline const NUMBER init_p_rat_negsmallest = {
-1, -1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_negsmallest = { inline const NUMBER init_q_rat_negsmallest = {
1, 1,
4, 4,
0, 0,
{ 0, 190439170, 901055854, 10097,} { 0, 190439170, 901055854, 10097,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pt_eight_five = { inline const NUMBER init_p_pt_eight_five = {
1, 1,
1, 1,
0, 0,
{ 85,} { 85,}
}; };
NUMBER init_q_pt_eight_five = { inline const NUMBER init_q_pt_eight_five = {
1, 1,
1, 1,
0, 0,
{ 100,} { 100,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_six = { inline const NUMBER init_p_rat_six = {
1, 1,
1, 1,
0, 0,
{ 6,} { 6,}
}; };
NUMBER init_q_rat_six = { inline const NUMBER init_q_rat_six = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_two = { inline const NUMBER init_p_rat_two = {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
NUMBER init_q_rat_two = { inline const NUMBER init_q_rat_two = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_zero = { inline const NUMBER init_p_rat_zero = {
1, 1,
1, 1,
0, 0,
{ 0,} { 0,}
}; };
NUMBER init_q_rat_zero = { inline const NUMBER init_q_rat_zero = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_one = { inline const NUMBER init_p_rat_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_one = { inline const NUMBER init_q_rat_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_neg_one = { inline const NUMBER init_p_rat_neg_one = {
-1, -1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_neg_one = { inline const NUMBER init_q_rat_neg_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_half = { inline const NUMBER init_p_rat_half = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_half = { inline const NUMBER init_q_rat_half = {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_ten = { inline const NUMBER init_p_rat_ten = {
1, 1,
1, 1,
0, 0,
{ 10,} { 10,}
}; };
NUMBER init_q_rat_ten = { inline const NUMBER init_q_rat_ten = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pi = { inline const NUMBER init_p_pi = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
NUMBER init_q_pi = { inline const NUMBER init_q_pi = {
1, 1,
6, 6,
0, 0,
{ 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_two_pi = { inline const NUMBER init_p_two_pi = {
1, 1,
6, 6,
0, 0,
{ 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,} { 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,}
}; };
NUMBER init_q_two_pi = { inline const NUMBER init_q_two_pi = {
1, 1,
6, 6,
0, 0,
{ 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pi_over_two = { inline const NUMBER init_p_pi_over_two = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
NUMBER init_q_pi_over_two = { inline const NUMBER init_q_pi_over_two = {
1, 1,
6, 6,
0, 0,
{ 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,} { 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_one_pt_five_pi = { inline const NUMBER init_p_one_pt_five_pi = {
1, 1,
6, 6,
0, 0,
{ 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,} { 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,}
}; };
NUMBER init_q_one_pt_five_pi = { inline const NUMBER init_q_one_pt_five_pi = {
1, 1,
6, 6,
0, 0,
{ 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,} { 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_e_to_one_half = { inline const NUMBER init_p_e_to_one_half = {
1, 1,
6, 6,
0, 0,
{ 256945612, 216219427, 223516738, 477442596, 581063757, 23,} { 256945612, 216219427, 223516738, 477442596, 581063757, 23,}
}; };
NUMBER init_q_e_to_one_half = { inline const NUMBER init_q_e_to_one_half = {
1, 1,
6, 6,
0, 0,
{ 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,} { 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_exp = { inline const NUMBER init_p_rat_exp = {
1, 1,
6, 6,
0, 0,
{ 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,} { 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,}
}; };
NUMBER init_q_rat_exp = { inline const NUMBER init_q_rat_exp = {
1, 1,
6, 6,
0, 0,
{ 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,} { 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_ln_ten = { inline const NUMBER init_p_ln_ten = {
1, 1,
6, 6,
0, 0,
{ 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,} { 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,}
}; };
NUMBER init_q_ln_ten = { inline const NUMBER init_q_ln_ten = {
1, 1,
6, 6,
0, 0,
{ 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,} { 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_ln_two = { inline const NUMBER init_p_ln_two = {
1, 1,
6, 6,
0, 0,
{ 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,} { 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,}
}; };
NUMBER init_q_ln_two = { inline const NUMBER init_q_ln_two = {
1, 1,
6, 6,
0, 0,
{ 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,} { 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rad_to_deg = { inline const NUMBER init_p_rad_to_deg = {
1, 1,
6, 6,
0, 0,
{ 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,} { 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,}
}; };
NUMBER init_q_rad_to_deg = { inline const NUMBER init_q_rad_to_deg = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rad_to_grad = { inline const NUMBER init_p_rad_to_grad = {
1, 1,
6, 6,
0, 0,
{ 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,} { 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,}
}; };
NUMBER init_q_rad_to_grad = { inline const NUMBER init_q_rad_to_grad = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_qword = { inline const NUMBER init_p_rat_qword = {
1, 1,
3, 3,
0, 0,
{ 2147483647, 2147483647, 3,} { 2147483647, 2147483647, 3,}
}; };
NUMBER init_q_rat_qword = { inline const NUMBER init_q_rat_qword = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_dword = { inline const NUMBER init_p_rat_dword = {
1, 1,
2, 2,
0, 0,
{ 2147483647, 1,} { 2147483647, 1,}
}; };
NUMBER init_q_rat_dword = { inline const NUMBER init_q_rat_dword = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_long = { inline const NUMBER init_p_rat_max_long = {
1, 1,
1, 1,
0, 0,
{ 2147483647,} { 2147483647,}
}; };
NUMBER init_q_rat_max_long = { inline const NUMBER init_q_rat_max_long = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_long = { inline const NUMBER init_p_rat_min_long = {
-1, -1,
2, 2,
0, 0,
{ 0, 1,} { 0, 1,}
}; };
NUMBER init_q_rat_min_long = { inline const NUMBER init_q_rat_min_long = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_word = { inline const NUMBER init_p_rat_word = {
1, 1,
1, 1,
0, 0,
{ 65535,} { 65535,}
}; };
NUMBER init_q_rat_word = { inline const NUMBER init_q_rat_word = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_byte = { inline const NUMBER init_p_rat_byte = {
1, 1,
1, 1,
0, 0,
{ 255,} { 255,}
}; };
NUMBER init_q_rat_byte = { inline const NUMBER init_q_rat_byte = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_400 = { inline const NUMBER init_p_rat_400 = {
1, 1,
1, 1,
0, 0,
{ 400,} { 400,}
}; };
NUMBER init_q_rat_400 = { inline const NUMBER init_q_rat_400 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_360 = { inline const NUMBER init_p_rat_360 = {
1, 1,
1, 1,
0, 0,
{ 360,} { 360,}
}; };
NUMBER init_q_rat_360 = { inline const NUMBER init_q_rat_360 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_200 = { inline const NUMBER init_p_rat_200 = {
1, 1,
1, 1,
0, 0,
{ 200,} { 200,}
}; };
NUMBER init_q_rat_200 = { inline const NUMBER init_q_rat_200 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_180 = { inline const NUMBER init_p_rat_180 = {
1, 1,
1, 1,
0, 0,
{ 180,} { 180,}
}; };
NUMBER init_q_rat_180 = { inline const NUMBER init_q_rat_180 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_exp = { inline const NUMBER init_p_rat_max_exp = {
1, 1,
1, 1,
0, 0,
{ 100000,} { 100000,}
}; };
NUMBER init_q_rat_max_exp = { inline const NUMBER init_q_rat_max_exp = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_exp = { inline const NUMBER init_p_rat_min_exp = {
-1, -1,
1, 1,
0, 0,
{ 100000,} { 100000,}
}; };
NUMBER init_q_rat_min_exp = { inline const NUMBER init_q_rat_min_exp = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_fact = { inline const NUMBER init_p_rat_max_fact = {
1, 1,
1, 1,
0, 0,
{ 3249, } { 3249, }
}; };
NUMBER init_q_rat_max_fact = { inline const NUMBER init_q_rat_max_fact = {
1, 1,
1, 1,
0, 0,
{ 1, } { 1, }
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_fact = { inline const NUMBER init_p_rat_min_fact = {
-1, -1,
1, 1,
0, 0,
{ 1000, } { 1000, }
}; };
NUMBER init_q_rat_min_fact = { inline const NUMBER init_q_rat_min_fact = {
1, 1,
1, 1,
0, 0,

View File

@ -411,7 +411,7 @@ extern void tanrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision);
// angle type // angle type
extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
extern void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src); extern void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src);
extern void _destroynum( _In_ PNUMBER pnum ); extern void _destroynum( _In_ PNUMBER pnum );
extern void _destroyrat( _In_ PRAT prat ); extern void _destroyrat( _In_ PRAT prat );

View File

@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -31,8 +31,8 @@ static int cbitsofprecision = 0;
#define READRAWNUM(v) #define READRAWNUM(v)
#define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout) #define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout)
#define DUMPRAWNUM(v) fprintf( stderr, \ #define DUMPRAWNUM(v) fprintf( stderr, \
"// Autogenerated by _dumprawrat in support.c\n" ); \ "// Autogenerated by _dumprawrat in support.cpp\n" ); \
fprintf( stderr, "NUMBER init_" #v "= {\n" ); \ fprintf( stderr, "inline const NUMBER init_" #v "= {\n" ); \
_dumprawnum(v, wcout); \ _dumprawnum(v, wcout); \
fprintf( stderr, "};\n" ) fprintf( stderr, "};\n" )