TITLE:
Source-to-Source Refactoring and Elimination of Global Variables in C Programs
AUTHORS:
Hemaiyer Sankaranarayanan, Prasad A. Kulkarni
KEYWORDS:
Global Variable; Program Refactoring; Compiler Transformations
JOURNAL NAME:
Journal of Software Engineering and Applications,
Vol.6 No.5,
May
23,
2013
ABSTRACT:
A global variable in C/C++ is one that
is declared outside a function, and whose scope extends the lifetime of the
entire program. Global variables cause problems for program dependability,
maintainability, extensibility, verification, and thread-safety. However,
global variables can also make coding more convenient and improve program
performance. We have found the use of global variables to remain unabated and
extensive in real-world software. In this paper we present a source-to-source
refactoring tool to automatically detect and localize global variables in a
program. We implement a compiler based transformation to find the best location
to redefine each global variable as a local. For each global, our algorithm
initializes the corresponding new local variable, passes it as an argument to
necessary functions, and updates the source lines that used the global to now
instead use the corresponding local or argument. We also characterize the use
of global variables in standard benchmark programs. We study the effect of our
transformation on static program properties, such as change in the number of
function arguments and program state visibility. Additionally, we quantify
dynamic program features, including memory and runtime performance, before and
after our localizing transformation.