초가화 하지 않은 static 변수는 값이 0이 아닐 수도 있나요?

chocokeki의 이미지


전역변수나 함수 내부에 static 선언한 변수들의 초기값이 0이 아닐 수도 있나요?
환경은 ARM 펌웨어이며 gcc와 C를 사용하고 있습니다

bss 영역이면 프로그램 기동시 0으로 이쁘게 초기화 하지 않나요?

일단 혹시 몰라서 선언할 때 가능하면 0으로 초기화를 동시에 하고 있습니다(이러면 bss로 안가겠죠?)

bushi의 이미지

drinkme의 이미지

bss를 clear해주는 코드를 추가해줘야 해요.
보통은 C startup code에서 이걸 해주는데, firmware 환경이면, 그 부분이 없겠네요.
0으로 강제 할당해도, compiler가 bss에 넣을겁니다.

bushi의 이미지

C startup code 에서 bss clear 하는 부분의 코드가 어디인지 좀 알려주실 수 있나요 ?

ymir의 이미지

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

bushi의 이미지

둘 모두 OS 나 다른 로더가 없는 firmware 환경이라 생각됩니다.
일반적으론, ELF 로더에서 bss clear 를 해 줍니다. 예를 들면, 리눅스 커널의 binfmt_elf.

drinkme 님이 말씀하시는 "C startup 코드" 라는 게 뭔지 애매해서 여쭤본건데, ymir 님이 생각하시기에도 crt 인 것 같나보네요...

ymir의 이미지

로더가 있고 없고에 따라 역할이 조금 달라지는군요.
어쩐지 뭔가 아실 것 같은데 물어 보시길래 조금 의아하게 생각했습니다.

예전에 stm32 계열 보드 갖고 뭐 좀 하다가, 힙이 좀 많이 필요해서..
linker script 포함해서 여기 저기 좀 건드리면서 본 기억이 있었는데..
그래서 그냥 단순히 crt 인가 보다 하고 생각했네요..;;

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

drinkme의 이미지

linux같은것에는 loader가 0으로 만들어주고요
bare metal 환경에서는 crt가 main() 호출 전에 해줘요.

표준 crt 안썼으면,
그냥 main() 초기나 그 전에서 bss를 0으로 써주면 되요.

bushi의 이미지

crt 에서 bss clear 를 하는 것은, 특정 환경을 전제로 하고 제공되는, 개조된 전용 툴체인 입니다.

bare metal 환경을 가정하고 개발되는 부트로더나 커널은 범용 툴체인으로 개발을 하죠.
이런 경우엔 crt 를 아예 안 씁니다. 그래서 main 같은 놈도 따로 정해놓고 쓰진 않고요.
crt 역할을 하는 놈이 아예 없지는 않습니다. 예를 들면 lk(little kernel) 같은 놈은 .init 이나 .ctors 같은 constructor 까지도 자체 처리를 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.