Skip to main content

Code Optimization | Code Optimization Techniques

Code Optimization-

Code Optimization is an approach to enhance the performance of the code.
The process of code optimization involves-

  • Eliminating the unwanted code lines
  • Rearranging the statements of the code

Advantages-

The optimized code has the following advantages-
  • Optimized code has faster execution speed.
  • Optimized code utilizes the memory efficiently.
  • Optimized code gives better performance.

Code Optimization Techniques-

Important code optimization techniques are-



  1. Compile Time Evaluation
  2. Common sub-expression elimination
  3. Dead Code Elimination
  4. Code Movement
  5. Strength Reduction

1. Compile Time Evaluation-

Two techniques that falls under compile time evaluation are-

A) Constant Folding-

In this technique,
  • As the name suggests, it involves folding the constants.
  • The expressions that contain the operands having constant values at compile time are evaluated.
  • Those expressions are then replaced with their respective results.

Example-

Circumference of Circle  = (22/7) x Diameter
Here,
  • This technique evaluates the expression 22/7 at compile time.
  • The expression is then replaced with its result 3.14.
  • This saves the time at run time.

B) Constant Propagation-

In this technique,
  • If some variable has been assigned some constant value, then it replaces that variable with its constant value in the further program during compilation.
  • The condition is that the value of variable must not get alter in between.

Example-

pi = 3.14

radius = 10
Area of circle = pi x radius x radius
Here,
  • This technique substitutes the value of variables ‘pi’ and ‘radius’ at compile time.
  • It then evaluates the expression 3.14 x 10 x 10.
  • The expression is then replaced with its result 314.
  • This saves the time at run time.

2. Common Sub-Expression Elimination-

The expression that has been already computed before and appears again in the code for computation

is called as Common Sub-Expression.
In this technique,
  • As the name suggests, it involves eliminating the common sub expressions.
  • The redundant expressions are eliminated to avoid their re-computation.
  • The already computed result is used in the further program when required.

Example-

Code Before Optimization Code After Optimization
S1 = 4 x i S1 = 4 x i
S2 = a[S1] S2 = a[S1]
S3 = 4 x j S3 = 4 x j
S4 = 4 x i  // Redundant  Expression S5 = n
S5 = n
S6 = b[S4] + S5 S6 = b[S4] + S5

3. Code Movement-

In this technique,
  • As the name suggests, it involves movement of the code.
  • The code present inside the loop is moved out if it does not matter whether it is present inside or outside.
  • Such a code unnecessarily gets execute again and again with each iteration of the loop.
  • This leads to the wastage of time at run time.

Example-

Code Before Optimization Code After Optimization

for ( int j = 0 ; j < n ; j ++) x = y + z ;
{ for ( int j = 0 ; j < n ; j ++)
x = y + z ; {
a[j] = 6 x j; a[j] = 6 x j;
} }

4. Dead Code Elimination-

In this technique,
  • As the name suggests, it involves eliminating the dead code.
  • The statements of the code which either never executes or are unreachable or their output is never used are eliminated.

Example-

Code Before Optimization Code After Optimization

if (i == 1) i = 0
{
a = x + 5 ;
}
i = 0 ;

5. Strength Reduction-


In this technique,
  • As the name suggests, it involves reducing the strength of expressions.
  • This technique replaces the expensive and costly operators with the simple and cheaper ones.

Example-

Code Before Optimization Code After Optimization
B = A x 2 B = A + A
Here,
  • The expression “A x 2” is replaced with the expression “A + A”.
  • This is because the cost of multiplication operator is higher than that of addition operator.

Comments

Popular posts from this blog

Elimination of Left Factoring

In left factoring, We make one production for each common prefixes. The common prefix may be a terminal or a non-terminal or a combination of both. Rest of the derivation is added by new productions. The grammar obtained after the process of left factoring is called as Left Factored Grammar . Example-   PRACTICE PROBLEMS BASED ON LEFT FACTORING- Problem-01: Do left factoring in the following grammar- S → iEtS / iEtSeS / a E → b Solution- The left factored grammar is- S → iEtSS’ / a S’ → eS / ∈ E → b Problem-02: Do left factoring in the following grammar- A → aAB / aBc / aAc Solution- Step-01: A → aA’ A’ → AB / Bc / Ac Again, this is a grammar with common prefixes. Step-02: A → aA’ A’ → AD / Bc D → B / c This is a left factored grammar. Problem-03: Do left factoring in the following grammar- S → bSSaaS / bSSaSb / bSb / a Solution- ...

FIRST & FOLLOW Calculation

First Function- First(α) is a set of terminal symbols that begin in strings derived from α. Example- Consider the production rule- A → abc / def / ghi Then, we have- First(A) = { a , d , g } Rules For Calculating First Function- Rule-01: For a production rule X → ∈, First(X) = { ∈ } Rule-02: For any terminal symbol ‘a’, First(a) = { a } Rule-03: For a production rule X → Y1Y2Y3, Calculating First(X) If ∈ ∉ First(Y1), then First(X) = First(Y1) If ∈ ∈ First(Y1), then First(X) = { First(Y1) – ∈ } ∪ First(Y2Y3) Calculating First(Y2Y3) If ∈ ∉ First(Y2), then First(Y2Y3) = First(Y2) If ∈ ∈ First(Y2), then First(Y2Y3) = { First(Y2) – ∈ } ∪ First(Y3) Similarly, we can make expansion for any production rule X → Y1Y2Y3…..Yn. Follow Function- Follow(α) is a set of terminal symbols that appear immediately to the right of...