jak dowiedziec sie ile bajtow zajmuje kod funkcji?

0

mam jakas funkcje:

int funkcja(){
puts("abc");
return 0;
}

iteraz chce poznac ile bajtow ona zajmuje (po skompilowaniu). Jak to zrobic?

0

Nie da się. C++ nie udostępnia takiego mechanizmu. Teoretycznie ułożenie danych powinno być zgodne z kolejnością definicji ale nie jest to pewne, dla przykładu:

#include <iostream>
using namespace std;

int suma(int a, int b) {
	return a + b;
}
void dummy() {}

int main() {
	cout << (long)&dummy - (long)&suma << endl;
}

w wersji Debug pod Visualem da wynik ujemny, jedynie release działa zgodnie z założeniami. Do tego dochodzi wyrównanie adresów.

0

Na pewno w starym porcie gcc dla DOS, DJGPP to się chyba zwało, na ułożeniu można było polegać. O tyle jestem tego pewien, że było kilka makr, które się rozwijały w układ:

void funkcja_start() { }

int funkcja() { /* kod */ }

void funkcja_end() { }

// ....

int rozmiar_funkcji = (char*)funkcja_end - (char*)funkcja_start;

na GCC w trybie debug też to jako tako działa, ale jest to metoda - jak wskazał Deus - niepewna. Nic pewniejszego nie ma, chyba że twórcy gcc znowu z nudów jakieś extension napisali, albo Microsoft ma jakieś bydle zaszyte głęboko i nieudokumentowane.

0

iteraz chce poznac ile bajtow ona zajmuje (po skompilowaniu)

1.Jak po skompilowaniu to można użyć deasemblera i dokładnie obejrzeć sobie funkcję,
na podstawie adresów obliczyć rozmiar kodu .
Ps. faktem jest nie istnieje coś takiego jak sizeof(fun) -sizeof(&fun) zwróci rozmiar danej zawierającej adres fun .
sizeof jest obliczane w trakcie kompilacji i "wklejane" do kodu na sztywno .
ps.2
Jeśli chcesz uzyskać przybliżony rozmiar kodu fun w C,C++ to mozna wywołać
fun z etykietami __asm które ( i tak trzeba potem przeanalizować kod i dodać parę bajtów)
określą rozmiar kodu pomiędzy prologiem i epil . fun który musi być ustalony na podstawie
kodu który generuje kompilator ,,,
[podstawową wada rozwiązania to że fun musi zostać wywołana podczas działania programu oraz dodatkowo zwrócić wartość określającą rozmiar kodu - czyli
nie jest to "sizeof"]
Tyle wiem na ten temat , bez asemblera się raczej nie obędzie ,,,
Patrz punkt 1 .

Ps.3

sizeof(funkcja)

Mylący i źle dobrany temat dla wątku ....
// moderatorzy czuwają ,,, ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1