There are more differences than just that. But you are correct. Stored procedures are compiled and stored in the database. They're typically small, but the more complex they are, the bigger they get. This query will show you how much space they take up:
SELECT TB.DatabaseName ,TB.TableName ,SUM(TS.CurrentPerm) FROM "DBC"."Tables" AS TB INNER JOIN "DBC".TableSize AS TS ON TB.TableName = TS.TableName AND TB.DatabaseName = TS.DataBaseName WHERE TableKind = 'P' GROUP BY 1 ,2 ORDER BY 3 DESC;
A macro, however, requires no space. Simply change out the TableKind = 'P' for TableKind = 'M' in the above query to see what I mean. It's basically like a view in that regard.