오리너구리는 왜 포유류일까
close
프로필 배경
프로필 로고

오리너구리는 왜 포유류일까

  • 분류 전체보기 (114)
    • Study (114)
      • 프로젝트 (2)
      • Spring In Action (7)
      • CSAPP (14)
      • 알고리즘 (9)
      • CS (11)
      • SICP (68)
      • SQL (2)
      • ADSP (1)
  • 홈
  • 태그
  • 방명록

[CSAPP] 정적/동적 라이브러리와 Java 동적 로딩: DLL, JNI, AOP까지

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:C/C++에서는 표준 라이브러리를 정적으로 링크하면 각 실행 파일이 라이브러리 코드 사본을 하나씩 들고 다녀 디스크와 메모리가 낭비된다. 반면 Java에서는 .jar 파일 하나를 여러 애플리케이션이 공유하거나, JVM 내부에서 클래스 정보를 한 번만 로드해 여러 쓰레드와 인스턴스가 공유하는 구조를 사용한다. 또한 Java 코드에서 Class.forName, getMethod, invoke와 같은 리플렉션이 C의 dlopen, dlsym, 함수 포인터 호출과 개념적으로 비슷하다는 점, Spring AOP가 “함수 가로채기”라는 관점에서 C의 라이브러리 인터포지셔닝과 닮아 있다는 점이 궁금해졌다.탐구 목표:본 ..

  • format_list_bulleted Study/CSAPP
  • · 2025. 12. 10.
  • textsms

[CSAPP] 링킹(Linking)과 로딩(Loading): 실행 파일이 메모리에서 프로세스가 되기까지

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:Java와 Spring으로 개발할 때는 javac로 컴파일하고 java 명령어로 실행하면 그만이었다. 하지만 C/C++ 프로그램을 빌드하면서 "왜 gcc는 컴파일과 링킹을 분리하는가?", "같은 이름의 전역 변수가 여러 파일에 있으면 어떻게 되는가?", "정적 라이브러리(.a)와 동적 라이브러리(.so)는 어떻게 다르게 처리되는가?" 같은 질문들이 생겼다.탐구 목표:본 글에서는 컴파일 이후 단계인 링킹(Linking)과 로딩(Loading) 과정을 단계별로 분석한다. 특히 (1) 링커가 여러 목적 파일(.o)의 심볼을 어떻게 해석하고 충돌을 해결하는지, (2) 재배치(Relocation)를 통해 실제 메모리..

  • format_list_bulleted Study/CSAPP
  • · 2025. 12. 10.
  • textsms

[CSAPP] 빌드 시스템의 핵심 '링킹(Linking)': 코드가 실행 파일이 되기까지의 여정

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:여러 개의 C 파일을 컴파일해서 실행 파일로 만드는 과정에서, 각각의 함수, 전역 변수 등은 어떻게 하나의 완성된 파일로 통합되는가? 함수명이 겹치면 어떤 일이 벌어지는가? GCC 명령어 한 줄 뒤엔 무슨 일이 진행되는가?탐구 목표:GCC의 컴파일/빌드 과정, 특히 정적 링킹 과정에서 핵심 역할을 하는 심볼 해석, 재배치 메커니즘을 Elf 포맷 기준으로 분석한다. 이를 통해 소스코드가 실행파일로 합쳐지는 실제 동작 원리와 의도치 않은 링킹 에러 이슈의 트러블슈팅 능력을 기르는 것이 목표이다.2. 기술 분석 및 핵심 원리 (Technical Deep Dive)2-1. 컴파일러 드라이버의 동작 순서와 역할전처리..

  • format_list_bulleted Study/CSAPP
  • · 2025. 11. 26.
  • textsms

[CSAPP] 메모리 계층과 지역성: CPU–메모리 갭을 줄이는 하드웨어·소프트웨어 전략

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:현대 CPU는 클럭 속도와 내부 병렬성이 계속 향상되지만, 메인 메모리와 디스크는 이에 비해 상대적으로 느리게 발전하면서 CPU와 메모리 사이의 속도 격차, 즉 프로세서–메모리 갭이 점점 커지고 있다.이로 인해 프로그램의 성능이 CPU가 아니라 메모리 접근 지연(latency)에 의해 결정되는 메모리 월(memory wall) 현상이 나타나며, 이를 완화하기 위한 핵심 기술이 메모리 계층과 캐시, 그리고 지역성에 맞는 코드 작성이다. 탐구 목표:본 아티클에서는 SRAM과 DRAM을 중심으로 저장장치 기술의 차이를 정리하고, 메모리 계층 구조와 캐시 동작 원리(S, E, B, m 파라미터와 매핑 방식)를 분석..

  • format_list_bulleted Study/CSAPP
  • · 2025. 11. 18.
  • textsms

[CSAPP] 컴파일러는 왜 내 코드를 최적화하지 못할까?: 데이터 의존성과 분기 예측의 비밀

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:GCC 컴파일러에 -O2, -O3와 같은 높은 수준의 최적화 옵션을 적용했음에도 불구하고, 특정 코드의 성능이 기대만큼 향상되지 않는 경우가 있습니다. 논리적으로 동일해 보이는 두 코드 블록이 수 배의 성능 차이를 보이는 현상도 관찰됩니다. 컴파일러 자동 최적화의 명백한 한계는 어디에서 비롯되며, 개발자는 하드웨어의 성능을 최대로 끌어내기 위해 코드를 어떻게 작성해야 할까요?탐구 목표:본 아티클에서는 컴파일러 최적화를 방해하는 핵심 요인인 메모리 앨리어싱과 함수 부수 효과를 알아봅니다. 나아가 현대 프로세서의 명령어 수준 병렬성(Instruction-Level Parallelism)을 중심으로, 데이터 의존..

  • format_list_bulleted Study/CSAPP
  • · 2025. 11. 12.
  • textsms

[CSAPP] Y86-64 ISA의 순차적 구현: SEQ 프로세서 동작 원리 분석

1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:복잡한 상용 프로세서의 ISA(Instruction Set Architecture)인 x86-64는 어떻게 하드웨어로 구현될까? 이 근본적인 질문에 답하기 위해, x86-64의 핵심 기능만 간추린 교육용 ISA, Y86-64를 통해 가상 CPU의 동작 원리를 탐구한다.탐구 목표:본 아티클에서는 Y86-64 ISA의 정의와 이를 하드웨어로 구현하는 데 필요한 디지털 논리의 기본 개념을 학습한다. 최종적으로, Y86-64 명령어를 한 클럭 사이클에 순차적으로 처리하는 SEQ 프로세서의 6단계(인출, 해독, 실행, 메모리, 쓰기, PC 업데이트) 동작 원리를 분석하여 프로세서의 가장 기본적인 구현 방식을 이해하는..

  • format_list_bulleted Study/CSAPP
  • · 2025. 11. 11.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (114)
    • Study (114)
      • 프로젝트 (2)
      • Spring In Action (7)
      • CSAPP (14)
      • 알고리즘 (9)
      • CS (11)
      • SICP (68)
      • SQL (2)
      • ADSP (1)
최근 글
인기 글
최근 댓글
태그
  • #dp
  • #Java
  • #백준
  • #spring boot
  • #csapp
  • #spring
  • #string
  • #scip
  • #알고리즘
  • #SICP
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바