Core C Programming Concepts and Memory Management

Function Assembly Patterns

int add_values(int a, int b) {
    return 0;
}

Assembly implementation follows stack-based parameter passing from right to left, with return values stored in EAX. EBP represents the stack base pointer, while ESP tracks the stack top.

Variable Types

Global Variables

  • Memory address and size determined during compilation
  • Variable names serve as memory address aliases
  • Memory addresses remain constant unless recompiled
  • Accessible and modifiable by any program component
  • Used as base addresses in game hacking techniques

Local Variables

  • Allocated within function scope
  • Memory space exists only during function execution
  • Stack-allocated memory with unpredictable addresses
  • Limited to function internal usage due to address uncertainty

Signed vs Unsigned Number Representation

Signed and unsigned numbers share identical memory storage patterns but differ during extension and comparison operations:

  • Char to int conversion: Signed numbers extend with sign bit replication, unsigned with zero padding
  • Value comparison: Unsigned -1 (0xFF) exceeds unsigned 1 (0x01) due to 255 vs 1 interpretation
  • Signed comparisons maintain expected mathematical relationships

Floating-Point Storage Format

Float and double types adhere to IEEE encoding standards rather than two's complement integer representation. Precision depends on mantissa bit count:

  • Float: 23-bit mantissa provides 7 significant digits (2^23 = 8388608)
  • Double: 53-bit mantissa supports approximately 16 significant digits

Chinese Character Encoding

Characters beyond ASCII 127 utilize multi-byte encoding schemes. GB2312 encoding represents Chinese characters using two consecutive bytes with values exceeding 127, replacing extended ASCII interpretations.

Switch Statement Efficiency

Switch statements employ jump table optimization rather than sequential comparison chains:

  • Creates direct address mapping table
  • Calculates jump offset via parameter minus first case address
  • Handles non-continuous cases using default address substitution
  • Eliminates repeated conditional checking

Structure Byte Alignment

Default Alignment

Structures align to the largest member's size. Mixed int (4 bytes) and char (1 byte) members result in 8-byte structures rather than 5 bytes.

Custom Alignment

#pragma pack(n) directive modifies alignment behavior. Final structure size becomes the smallest multiple of the pack value and largest member size. Use #pragma pack() to restore default behavior.

Pointer Arithmetic Operations

Pointer increment/decrement behavior depends on dereference level (excluding function pointers):

  • Remove one asterisk and examine left side
  • Remaining asterisks indicate 4-byte increments
  • No asterisks result in 1-byte increments

Common Calling Conventions

Three primary calling conventions govern parameter passing and stack management.

Duplicate Inclusion Resolution

Conditional Compilation

#ifndef HEADER_NAME
#define HEADER_NAME
// Header content
#endif

Forward Declarations

Forward declarations provide type information without complete definitions, resolving circular dependencies between structures and functions during compilation.

Tags: c programming Memory Management assembly Data Types pointers

Posted on Mon, 21 Sep 2026 16:08:01 +0000 by paran0id Dan